网站大量收购独家精品文档,联系QQ:2885784924

电子课件本章常见错误.pptx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

本章常见错误

本讲大纲:

1、用DataReader读取数据时出现错误

支持网站:

3、以DataReader做为返回类型的陷阱

2、混淆.NET和SQLServer中的“空值”

用DataReader读取数据时出现错误

在ADO.NET中,可以通过Command对象的ExecuteReader()方法从数据源中检索数据来创建DataReader读取器。例如,使用DataReader读取器读取数据库中的用户信息表,代码如下:

SqlConnectioncon=

newSqlConnection(server=Mrwxk\\mrwxk;userid=sa;pwd=;database=db_CSharp);

try

{

con.Open(); //打开数据库连接

SqlCommandcmd=newSqlCommand(select*fromUserInfowhere1=0,con);//创建命令对象

SqlDataReaderreader=cmd.ExecuteReader();//创建数据阅读器

reader.Read();//打开数据阅读器

stringUserName=reader[UserName].ToString();

}

finally

{

if(con.State!=ConnectionState.Closed) //确保连接被关闭

{con.Close();}//关闭数据库连接

}

但在执行上述代码时,却弹出如图11.22所示的错误窗口,错误窗口中显示:“在没有任何数据时进行无效的读取尝试。”

从上面的错误信息中初步确认,是数据源中没有数据引起的问题,这主要是因为在执行Read()方法时,由于数据源中没有数据,所以第一次调用Read()方法时就返回false,但在代码中没有判断Read()方法的返回值就直接读取第一行记录,所以才会出现前面的错误。

该问题的解决方法是在使用DataReader每次读取记录之前判断Read()方法的返回值,只有返回值为true时才能读取记录。代码如下:

if(reader.Read())

{

stringUserName=reader[UserName].ToString();

}

混淆.NET和SQLServer中的“空值”

SQLServer中的“空值”用NULL表示,等同于“没有输入的值”,例如,在SQLServer数据库中某个表上插入一个新行,新行中没有输入值的字段都是“空值”。在SQL命令中,判断一个值是不是空值,要用“ISNULL”而不是“=NULL”。处理空值有个ISNULL函数,它使用指定的值替换NULL。

ADO.NET数据提供程序从数据库中提取数据时,在字段没有有效值时会自动分配DBNull值,即SQLServer中的NULL等同于.NET中的DBNull。

在.NET中,DBNull类型是一个单独的类,表示未初始化的变量或不存在的数据库列。而面向对象编程语言中的null表示不存在某个对象的引用。所以SQLServer数据库中的null和C#语言中的null是完全不相同的。

以一个学生数据为例,age年龄数据的值是null时,并不代表这个学生没有年龄(每个人一定都年龄),而是尚未设定或还不知道而已,声明一个可以允许空值的年龄变量,示例代码如下:

int?age=null;

以DataReader做为返回类型的陷阱(1)

ADO.NET提供了两种数据访问方式:一种是断开式访问(使用DataAdapter和DataSet实现数据访问),另一种是流式访问(使用Command和DataReader实现数据访问)。

DataReader是一个轻量级的数据对象,它提供的是一种在连接数据库的状态下、只能向前的记录访问方式。如果只需要将数据读出显示,使用它是最佳选择,它的读取速度比DataSet快,占用的资源比DataSet少。例如,使用DataReader读取数据,并返回DataReader类型,代码如下:

publicstaticIDataReaderGetDataReader(stringsql)

{

SqlConnectioncon=

newqlConnection(server=Mrwxk\\mrwxk;userid=sa;pwd=;database=db_CSharp);

try

{

con.Open();//打开数据连接

SqlCommandcmd=new

文档评论(0)

kay5620 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8001056127000014

1亿VIP精品文档

相关文档