[英]C# ADO.NET Parametrized query
我有一个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
不会替换为value,因此查询失败。 请给我一个提示。
当我在断点处停止并查看查询时,它看起来像:
SELECT AGENT.Number, PERSON.LoginName, AGENT.EnterpriseName
FROM Agent AGENT
INNER JOIN Person PERSON ON AGENT.PersonID = PERSON.PersonID
WHERE LOWER(EnterpriseName) LIKE @entname
所以什么都没有改变。
参数@entname不会替换为value,因此查询失败。
这不是参数的工作方式。 @entname
参数标记与匹配的参数值一起留在发送到SQL Server的查询中。
因此,带着这种误解,您引用了参数值,就像要将其粘贴到SQL查询中一样:
Value = "'%" + agentName + "%'"
您不应该这样做。 相反做
Value = "%" + agentName + "%"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.