喜欢条款和准备好的声明

Gui*_*ois 4 c# sql

我正在尝试使用预备语句使用LIKE子句发出SQL请求.

这是代码:

using (SqlConnection Connection = new SqlConnection(ConnectionString))
      {
         Connection.Open();
         string Query = "SELECT TOP 10 Field FROM Table WHERE Field LIKE '@pseudopart%'";
                using (SqlCommand Command = new SqlCommand(Query, Connection))
                {
                    Command.Parameters.AddWithValue("@pseudopart", pseudoPart);
                    using (SqlDataReader Reader = Command.ExecuteReader())
                    {
                        if (!Reader.HasRows)
                            return PossibleMatch;
                        while (Reader.Read())
                        {
                            PossibleMatch.Add(Reader["Field"].ToString());
                        }
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

读者永远是空的,我做错了什么?

Son*_*nül 5

由于您使用单引号,因此它将您的@pseudopart%部件视为字符串文字,而不是参数.

这就是您Field使用@pseudopart%字符串过滤列而不是pseudoPart变量值的原因.这就是为什么你的读者是空的.

请改用它;

string Query = "SELECT TOP 10 Field FROM Table WHERE Field LIKE @pseudopart";
..
Command.Parameters.AddWithValue("@pseudopart", pseudoPart + "%");
Run Code Online (Sandbox Code Playgroud)

顺便说一句,不要使用AddWithValue方法.可能有时会产生意外结果.使用Add()方法重载来指定参数SqlDbType及其大小.

我必须说,TABLE是T-SQL中的保留关键字.你应该像方括号一样使用它[TABLE].一些数据库管理员不考虑关键字情况(表 - 表),但据我所知,SQL Server默认考虑它.

最佳选择是将其更改为非保留字.