【问题标题】:Check if a datareader has rows or not in Asp.net检查数据读取器在 Asp.net 中是否有行
【发布时间】:2012-06-02 05:01:04
【问题描述】:

我的代码:

string sqlQuery1 = "select * from employees where depid=6";
SqlDataReader Dr1 = dbconn.RunQueryReturnDataReader(sqlQuery1);

if(Dr1.read()) {    //or if (Dr1["empname"] != DBNull.Value)

            while (Dr1.Read())
            {        
                Label1.Text = Dr1["empname"].ToString();  
                Label2.Text = Dr1["empdes"].ToString(); 
                ...

            }
            Dr1.Close();
 }
 else {
            Label1.text = "defaultValue";
            Label2.text = "defaultValue";
            ...
 }

我只想检查 SqlDataReader 没有要显示的记录。如果没有记录,标签应该显示我预先分配的默认值,或者如果标签上有记录显示数据读取器值。 (假设 SqlDataReader 有 1 个 recode 或只有 norecord)

如何检查第一个数据读取器 hasRow 与否?

我已经尝试了上述代码的两种方法。

  1. if(Dr1.read()) - 这样工作正常。但在执行If 语句后,标签上没有显示值,因为 read() 会增加指针。结果 label1 ,Label2.. 什么都没有显示。

  2. if (Dr1["empname"] != DBNull.Value)

    这种方式在Sqldatareader有norows时会产生异常。

error: System.InvalidOperationException: Invalid attempt to read when no data is present

请帮助我。交易

【问题讨论】:

    标签: c# asp.net sql sqldatareader


    【解决方案1】:

    试试……

    if(Dr1.HasRows)
    {
       //....
    }
    

    【讨论】:

    • 请记得像 Nikhil D 一样检查 NULL。
    【解决方案2】:
    if (Dr1 == null || !Dr1.HasRows) {
        // Do something
    }
    

    【讨论】:

    • 发送答案。你能解释一下检查 Dr1 和 Dr1.HasRows 的区别吗?
    • 如果 Dr1==null 为真,它将停止计算 - ||(OR) 运算符如果知道左侧为真,则无需计算表达式的右侧。
    • 不..你没有得到它。我问, (DataReader = null) 和 (dataReader.HasRows = false) 是什么意思?它们之间的区别是什么?
    • NULL 仅表示您尝试调用未初始化的 Dr1 (null)。而 Hasrows 表示它已初始化但没有数据(行)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多