C# C SqlDataReader行/列不存在任何数据

C# C SqlDataReader行/列不存在任何数据,c#,asp.net,sqldatareader,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 Vacat

我已经远离编程一段时间了,但最近我需要它

我在使用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.GetString0

但实际上那里有数据,因为Submit按钮及其所有代码都在工作,我已经在数据库表中检查了它


有什么建议吗?谢谢。

数据阅读器在第一行之前开始

要从第一行读取,请调用read一次。
如果没有第一行,Read将返回false。

您需要首先移动读卡器的行位置。 当你不再需要它时就把它关上

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

如果显示“行/列不存在数据”,则使用新的datareader

OleDbCommand cmdsearch2=新OleDbCommand从tbl_引号中选择*,其中quotationno=@qno,con; cmdsearch2.2参数。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();

非常感谢。成功了。我已经把控制室打开了上面的使用块和使用您的建议,它的工作。非常感谢你。