购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP


陷阱21
不知其二
——获取DataTable类型数据源产生的陷阱

1.陷阱产生的场景

DataTable类型的数据源属于断开连接式的数据源,在数据库应用程序开发中经常用到,它存储在内存中,所以读取效率比较高。本实例创建一个控制台应用程序,用于从指定的数据表中获取DataTable类型的数据源,并输出数据源中的相关数据。

例4.21 获取DataTable类型数据源产生的陷阱(光盘位置:光盘\MR\Instance\4\21\ UseDataTable),该实例的实现过程如下。

在本实例的默认类Program中添加一个自定义方法GetDataTable,该方法通过传入一个表示查询功能字符串来获取DataTable类型的数据源,该方法的代码如下:

在Program类的Main方法中调用GetDataTable方法获取DataTable类型的数据源,并输出数据源中的相关数据,具体代码如下:

上面的代码判断若返回的DataTable实例的Rows属性值不为空,则输出第一行第一列的值;若DataTable实例的Rows属性值为空,则输出显示“无数据行”。

技巧

在上面的代码中,在数据表sysusers中根本不存在Uid等于-1的数据记录。

编译后运行上面的代码,在运行时出现如图4.41所示的异常提示,异常信息提示“在位置0处没有任何行”。

2.陷阱的分析

根据上面的异常信息提示,初步判断数据源中没有行。于是添加对dt.Rows属性的快速监视,结果如图4.42所示。

图4.41 异常提示

图4.42 快速监视

从上图中可以看到,数据行数为0,但Rows属性值不为空,而我们的程序中恰恰通过判断Rows属性值是否为空来确定数据源中是否存在数据行,这就是问题所在。进一步分析发现,在GetDataTable方法中,当创建了DataTable实例,其Rows属性就已经被初始化,并且不为空,并且Rows.Count属性值等于0,其快速监视结果与图4.42相同。

3.陷阱的解决方法

通过上面的分析可知,使用Rows属性值进行直接判断是行不通的,所以建议使用Rows的Count属性值来判断数据源中是否存在数据行,修改后的代码如下: 2YBDXvkiMabxbU6IjNbjj5zpbso5dAFnhHcrP8lCTP/X22RE4r4KMaIOwve9X1rd

点击中间区域
呼出菜单
上一章
目录
下一章
×