0

我在 SQL Server Management Studio 中运行了 SQL Query,它工作正常。

我在 WinForm C# 应用程序中收到以下错误

The parameterized query '(@word1 text)SELECT distinct [database].[dbo].[tableName].[n' expects the parameter '@word1', which was not supplied.

这是我的代码

    private void buttonRunQuery_Click(object sender, EventArgs e)
     {
         if (connection == null)
         {
             connection = ConnectionStateToSQLServer();
             SqlCommand command = new SqlCommand(null, connection);
             command = createSQLQuery(command);
             GetData(command);
         }
         else
         {
             SqlCommand command = new SqlCommand(null, connection);
             command = createSQLQuery(command);
             GetData(command);
         }
     }

    private SqlCommand createSQLQuery(SqlCommand command)
     {
         string[] allTheseWords;
         if (textBoxAllTheseWords.Text.Length > 0)
         {
             allTheseWords = textBoxAllTheseWords.Text.Split(' ');
             string SQLQuery = "SELECT distinct [database].[dbo].[customerTable].[name], [database].[dbo].[customerTable].[dos], [database].[dbo].[customerTable].[accountID], [database].[dbo].[reportTable].[customerID], [database].[dbo].[reportTable].[accountID], [database].[dbo].[reportTable].[fullreport] FROM [database].[dbo].[reportTable], [database].[dbo].[customerTable] WHERE ";
             int i = 1;
             foreach (string word in allTheseWords)
             {
                 var name = "@word" + (i++).ToString();
                 command.Parameters.Add(name, SqlDbType.Text);
                     //(name, SqlDbType.Text).Value = word;
                 SQLQuery = SQLQuery + String.Format(" [database].[dbo].[reportTable].[fullreport] LIKE {0} AND ", name);
             }
             SQLQuery = SQLQuery + " [database].[dbo].[customerTable].[accountID] = [database].[dbo].[reportTable].[accountID]";
             command.CommandText = SQLQuery;
         }
         MessageBox.Show(command.CommandText.ToString());
         return command;
     }

    public DataTable GetData(SqlCommand cmd)
     {
         //SqlConnection con = new SqlConnection(connString);
         //SqlCommand cmd = new SqlCommand(sqlcmdString, cn);
         SqlDataAdapter da = new SqlDataAdapter(cmd);
         connection.Open();
         DataTable dt = new DataTable();
         da.Fill(dt);
         connection.Close();
         return dt;
     } 

错误发生在 da.Fill(dt)

任何的意见都将会有帮助

谢谢

4

2 回答 2

1

在 var name = "@word" + (i++).ToString(); 仅使用 i,在其他地方增加。

于 2013-02-01T16:45:41.697 回答
1

在您的示例中,您已注释掉设置参数值的行:

command.Parameters.Add(name, SqlDbType.Text);
//(name, SqlDbType.Text).Value = word;

如果您没有为参数设置值,它将被忽略(并且不存在)。改成这样:

command.Parameters.AddWithValue(name, word);

为清楚起见,请考虑以下引用:

要添加的值。使用 DBNull.Value 代替 null,以指示空值。

从这里开始:SqlParameterCollection.AddWithValue 方法

于 2013-02-01T16:52:27.327 回答