C# ADO SqlReader在读取()后失败=true:在不存在数据的情况下尝试读取无效
我有以下代码(在回答了一些问题后进行了修改): 据我所知,它不应该失败,因为我正在重复检查结果,首先是“HasRows”,然后是if“Read()”。 现在,虽然代码可以工作,但我比以前更困惑,因为它使用相同的值开始工作 谁能告诉我为什么C# ADO SqlReader在读取()后失败=true:在不存在数据的情况下尝试读取无效,c#,ado.net,sqldatareader,C#,Ado.net,Sqldatareader,我有以下代码(在回答了一些问题后进行了修改): 据我所知,它不应该失败,因为我正在重复检查结果,首先是“HasRows”,然后是if“Read()”。 现在,虽然代码可以工作,但我比以前更困惑,因为它使用相同的值开始工作 谁能告诉我为什么 提前感谢。请使用列idx或列名尝试invoiceResult.GetString()。确切的错误消息是什么?invoiceResult[“invoice_pk”]null吗?请注意,在SQL中附加字符串(特别是文本框中的值)会使您容易受到SQL注入的影响。考虑
提前感谢。请使用列idx或列名尝试invoiceResult.GetString()。确切的错误消息是什么?
invoiceResult[“invoice_pk”]
null吗?请注意,在SQL中附加字符串(特别是文本框中的值)会使您容易受到SQL注入的影响。考虑切换到参数不变。非常感谢您的答复。我的错误是:当没有数据出现时,消息=无效的读取尝试。还考虑在<代码>中使用< <代码> >语句(真的把所有的代码> IDISPOSTABLE < /代码> s)放入GRIN中,尝试<代码> Cuffice PK=CuffiCeReSurt。GetValue(0).toStReg();<代码>@juharr:谢谢你的建议。我现在正在做。
String sql = "SELECT invoice_pk FROM invoices WHERE invoice_number = " + InvoiceNumberLabel.Text;
SqlCommand cmd = new SqlCommand(sql, invoiceHeaderOnOSDconn);
SqlDataReader invoiceResult = cmd.ExecuteReader();
if (invoiceResult.HasRows)
{
if (invoiceResult.Read())
{ // As Rahul suggested (even though the post is now deleted) I added this third check and it worked
if (invoiceResult["invoice_pk"] != DBNull.Value)
{
String invoice_pk = invoiceResult["invoice_pk"].ToString();
}
}
invoiceResult.Close();
}