为了账号安全,请及时绑定邮箱和手机立即绑定

C# ADO.NET 参数化查询

C# ADO.NET 参数化查询

C#
呼唤远方 2022-08-20 14:51:02
我有一个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所以什么都没有改变。
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

参数@entname不会替换为值,因此查询失败。

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

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

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

你不应该这样做。相反,做

Value = "%" + agentName + "%"


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信