c# - SQL Server 查询不在 asp.net 中返回任何结果

标签 c# asp.net sql-server

我试图通过在犯罪数据库中查找他的 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/

相关文章:

c# - Json.NET 转换器的 ServiceStack.Text 等价物是什么,例如应用于 NodaTime 类型时?

c# - 将 user.config 拆分为不同的文件以便更快地保存(在运行时)

asp.net - 如何在 ASP.NET Web 应用程序中打开 SectionGroup?

java - 点击提交按钮后出错

c# - 何时在 C# 中使用 SqlConnection.ClearAllPools()

sql - 我们可以在选择查询的 From 子句中执行动态 SQL 吗?

c# - 成员名称长度

c# - Log4Net:如何向每个日志行添加简单索引器(行号)

javascript - Asp.net 在按钮按下时执行 html 代码

sql-server - RODBC 中的 varType 使用