日期:2014-05-17  浏览次数:20468 次

查询数据SqlDataReader
C# code

 private const string SQL_SELECT_USER = "SELECT ID,OId,Access,User_name,Img,CARDs,NAMEs From  info  WHERE ID = @Id";   
  private const string PARM_Id = "@Id";


     public ModelInfo info(int id) {

             ModelInfo info= new ModelInfo();


             SqlParameter parm = new SqlParameter(PARM_Id, SqlDbType.Int);
            parm.Value = id;


             using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_USER, parm))
             {


                    account = new ModelInfo (rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4), rdr.GetString(5),rdr.GetString(6));
              
             }

            return id;


数据字段 ID         int  
         OID        varchar(100) 可为空
         access     varchar(100) 可为空
         User_name  varchar(100) 可为空
         Img        varchar(100) 可为空
         cards      varchar(100) 可为空
         name       varchar(100) 可为空


string id="123";
ModelInfo    info= SQLServer.info(Int32.Parse(Id));



错误提示:
System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values.

求原因 问题已解决 但不知道SqlDataReader为什么不行

------解决方案--------------------
是不是你查询的记录里面没有数据,但是你却读取了,然后就报错了?
最好有If(sdr.read())来判断一下
------解决方案--------------------
探讨

引用:
C# code
if (rdr.Read())

此方法也用了 但还是报一样的错误

------解决方案--------------------
探讨

引用:
引用:

引用:
C# code
if (rdr.Read())

此方法也用了 但还是报一样的错误

我相信ExecuteReader这个方法里你是写了rdr.Read()
你可能读取了NULL值

++ 之前我没想到 一直找不到错 后来没办法 我直接写过了个方法

直接用dataset来读取了

------解决方案--------------------

刚验证了哈
把dr.GetString(1);
换成dr[1].ToString();

C# code


string s1 = dr.GetString(1);
string s2 = dr[1].ToString();