gpt4 book ai didi

C# ADO.NET 参数化查询

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:18 26 4
gpt4 key购买 nike

我有一个 T-SQL 和查询:

string queryString = @"SELECT AGENT.Number, PERSON.LoginName, AGENT.EnterpriseName FROM Agent AGENT INNER JOIN Person PERSON ON AGENT.PersonID = PERSON.PersonID WHERE LOWER(EnterpriseName) LIKE @entname";

string connStr = null;

try
{
connStr = ConfigurationManager.ConnectionStrings["DB"].ConnectionString + ToInsecureString(Decrypt(ConfigurationManager.AppSettings["admin"])) + ";";
}
catch (Exception ex)
{
Logs.WriteMessage("Error while making connStr " + ex.TargetSite + ex.StackTrace + ex.ToString());
}

try
{
using (SqlConnection connection = new SqlConnection(connStr))
{
connection.Open();

using (SqlCommand command = new SqlCommand(queryString, connection))
{
SqlParameter param = new SqlParameter
{
ParameterName = "@entname",
Value = "'%" + agentName + "%'"
};
command.Parameters.Add(param);

using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
login = (string)reader[1];
userID = (string)reader[0];
}
}
}

connection.Close();
}
}

这行不通。我没有得到任何结果,但是当我在查询中使用值而不是 @parameter 时,我得到了正确的结果。

参数 @entname 未替换为值,因此查询失败。请给我一个提示。

当我在断点处停止并查看查询时:

SELECT AGENT.Number, PERSON.LoginName, AGENT.EnterpriseName 
FROM Agent AGENT
INNER JOIN Person PERSON ON AGENT.PersonID = PERSON.PersonID
WHERE LOWER(EnterpriseName) LIKE @entname

所以什么都没有改变。

最佳答案

Parameter @entname doesn't replaced to value so the query failed.

这不是参数的工作方式。 @entname 参数标记与匹配的参数值一起保留在发送到 SQL Server 的查询中。

因此,由于存在这种误解,您引用了参数值,就好像它要被粘贴到 SQL 查询中一样:

Value = "'%" + agentName + "%'"

这是你不应该做的。而是做

Value = "%" + agentName + "%"

关于C# ADO.NET 参数化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54468503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com