ExecuteReader- System.Data.dll中发生类型为“System.InvalidOperationException”的异常,但未在用户代码中处理

时间:2016-03-18 09:08:20

标签: c# asp.net visual-studio-2015

每次尝试运行此特定网页时,我都会收到上述错误。我正在添加一些代码和数据库结构的图像(作为链接给出)。在错误的附加信息行中,它表示当数据表为空时已尝试读取数据。当我回去检查表数据时,存在数据。请帮忙!

SqlConnection con = new SqlConnection(@"ConnectionString");
protected void Page_Load(object sender, EventArgs e)
{
    string checkdu = "select Top 1 Hour, Minute, Hour1, Minute1 from Clockin";
    SqlCommand cmddu = new SqlCommand(checkdu, con);
    con.Open();
    SqlDataReader dru = cmddu.ExecuteReader();
    int td1 = (Convert.ToInt16(dru["Hour"]) * 60) + (Convert.ToInt16(dru["Minute"]));      //error shown here[enter image description here][1]
    int td2 = (Convert.ToInt16(dru["Hour1"]) * 60) + (Convert.ToInt16(dru["Minute1"]));

1 个答案:

答案 0 :(得分:3)

您必须使用SqlDataReader.Read让读者前进到下一个(第一个)记录:

using(var dru = cmddu.ExecuteReader())
{
    if(dru.Read())
    {
        int td1 = (Convert.ToInt16(dru["Hour"]) * 60) + (Convert.ToInt16(dru["Minute"]));      //error shown here[enter image description here][1]
        int td2 = (Convert.ToInt16(dru["Hour1"]) * 60) + (Convert.ToInt16(dru["Minute1"]));
    }
}

Remarks

  

SqlDataReader的默认位置是在第一条记录之前。   因此,您必须调用Read以开始访问任何数据。