C#SqlDataReader行/列没有数据

时间:2013-08-09 21:30:56

标签: c# asp.net sqldatareader

我已经离开了一段时间的编程,但最近我有需要它。

使用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未处理。行/列没有数据。”并且错误指向     fname_txt.Text = reader.GetString(0);

但实际上有数据,因为带有所有代码的“提交”按钮正在运行,我已经在数据库表中检查了它。

任何提示?谢谢。

3 个答案:

答案 0 :(得分:5)

DataReaders在第一行之前开始。

要从第一行开始阅读,请拨打Read()一次 如果没有第一行,Read()将返回false

答案 1 :(得分:2)

您需要先移动阅读器(行)位置。 当你不再需要它时关闭它。

...
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);
    }
}
...

答案 2 :(得分:0)

如果显示“行/列没有数据”

,请使用新的datareader

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();