C# SqlDataReader 没有数据存在于行/列中

6

我有一段时间没有进行编程了,但最近我又需要用到它。

我在使用Sql Server Compact Edition 4.0(VS2012内置)的SQL DataReader时遇到了问题。

string connstring = "Data Source=C:\\..(Path Here)..\\VacationsDB.sdf";
SqlCeConnection conn = new SqlCeConnection(connstring);
string strSQL = "SELECT * FROM Vacation WHERE VacationNo = @val";

using (SqlCeCommand cmd = new SqlCeCommand(strSQL, conn))
{
    //read search value from from text field
    cmd.Parameters.AddWithValue("@val", vacationno_txt.Text);
    conn.Open();

    SqlCeDataReader reader = cmd.ExecuteReader();
    fname_txt.Text = reader.GetString(0);
    mname_txt.Text = reader.GetString(1);
    /*
     * .. snip
     */
    vacationno_txt.Text = reader.GetString(11);
    conn.Close();
}

我不停地收到这个错误信息: “InvalidOperationException was Unhandled. No data exists for the row/column。” 错误指向了这一行: fname_txt.Text = reader.GetString(0); 但实际上,这个数据是存在的。因为 “提交” 按钮和它所有的代码都在工作中,我已经在数据库表中检查过了。
有什么建议吗?谢谢。
3个回答

8

DataReaders在第一行之前开始。

要从第一行中读取,请调用Read()方法一次。
如果没有第一行,则Read() 方法将返回false


5

首先需要移动读取器(行)的位置,当您不再需要它时请关闭它。

...
using(SqlCeDataReader reader = cmd.ExecuteReader())
{
    if (reader.Read())
    {
        fname_txt.Text = reader.GetString(0);
        mname_txt.Text = reader.GetString(1); . . . 
        vacationno_txt.Text = reader.GetString(11);
    }
}
...

谢谢。它起作用了。我已经将“conn.Open();”移到了“using”块上面,并使用了您的建议,它起作用了。非常感谢。 - Yousef Imran

0

如果出现“行/列不存在数据”,请使用新的数据阅读器

OleDbCommand cmdsearch2 = new OleDbCommand("Select * from tbl_quotation where quotationno = @qno ", con); cmdsearch2.Parameters.AddWithValue("@qno", txt_quotationno.Text); OleDbDataReader drr = cmdsearch2.ExecuteReader();

            if (drr.HasRows)
            {
                while (drr.Read())
                {
                    cmb_customername.Text = drr["customername"].ToString();
                    txt_revno.Text = drr["revno"].ToString();
                    dtp_qdate.Text = drr["qdate"].ToString();
                    txt_paymentterms.Text = drr["paymentterms"].ToString();
                    txt_delivery.Text = drr["delivery"].ToString();
                    txt_freight.Text = drr["freight"].ToString();
                    txt_quotationvalidity.Text = drr["validity"].ToString();


                }
            }
            drr.Close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接