我试图通过在犯罪数据库中查找他的 NIC 号码来检查一个人是否有过去的犯罪历史。但是查询没有获取任何数据,尽管没有异常并且数据库中存在相关数据,但数据读取器仍然是空的。
请看下面的代码:
SqlCommand cmd5 = new SqlCommand("select * from criminal where NIC ="+nic, conn);
string nic = "null";
foreach (var person in allInvolved)
{
conn.Open();
nic = person.NIC;
dr3 = cmd5.ExecuteReader();
if (dr3.HasRows)
{ do something }
else if (!dr3.HasRows)
{ do something else}
}
变量NIC里面有正确的值,调试的时候查了一下。我不知道我哪里错了。如果您需要有关代码的任何其他信息,请询问。
提前致谢。
最佳答案
当你这样做时:
SqlCommand cmd5 = new SqlCommand("select * from criminal where NIC ="+nic, conn);
nic
的当前值在那一刻被使用;将 nic
更改为 afterwards 什么并不重要:
nic = person.NIC;
dr3 = cmd5.ExecuteReader();
因为未使用该值。理想情况下,您应该参数化:
SqlCommand cmd5 = new SqlCommand(
"select * from criminal where NIC = @nic", conn);
var param = cmd5.Paramters.Add("nic", SqlDbType.SomethingRelevant);
// ^^^ note: I don't know what the data type is, you'll need to pick that
foreach(...) {
param.Value = ((object)person.NIC) ?? DBNull.Value;
using(var dr3 = cmd5.ExecuteReader()) {
// ...
}
}
...
此外,请注意这些对象中有很多是 IDisposable
并且应该在 using
block 中;或者,查看诸如“dapper”之类的工具,以便您可以执行以下操作:
var criminals = conn.Query<Criminal>(
"select * from criminal where NIC = @nic",
new { nic = person.NIC}).AsList();
关于c# - SQL Server 查询不在 asp.net 中返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902492/