[英]C# SqlDataReader No data exists for the row/column
我已经离开了一段时间的编程,但最近我需要它。
我使用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);
但实际上有数据,因为带有所有代码的“提交”按钮正在运行,我已经在数据库表中检查了它。
有小费吗? 谢谢。
DataReaders在第一行之前开始。
要从第一行Read()
,请调用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 = 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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.