SqlCommand参数未正确替换

时间:2013-01-28 18:09:55

标签: c# sql c#-4.0 parameters sqlparameters

private SqlCommand createSQLQuery(SqlCommand command)
{
    string[] allTheseWords;
    if (textBoxAllTheseWords.Text.Length > 0)
    {
        allTheseWords = textBoxAllTheseWords.Text.Split(' ');
        string SQLQuery = "SELECT distinct [skullbase].[dbo].[patients].[name], [skullbase].[dbo].[patients].[dos], [skullbase].[dbo].[patients].[ACC2], [SKULLbase].[dbo].[fullreport].[mrn1], [SKULLbase].[dbo].[fullreport].[ACC], [skullbase].[dbo].[fullreport].[fullreport] FROM [skullbase].[dbo].[fullreport], [skullbase].[dbo].[patients] WHERE ";
        int i = 1;
        foreach (string word in allTheseWords)
        {
            command.Parameters.Add("@word" + i.ToString(), SqlDbType.Text).Value = word;
            SQLQuery = SQLQuery + " [skullbase].[dbo].[fullreport].[fullreport] LIKE @word" + i.ToString() + " AND ";
            i++;
        }
        SQLQuery = SQLQuery + " skullbase.dbo.patients.ACC2 = skullbase.dbo.fullreport.ACC";
        command.CommandText = SQLQuery;
    }
    MessageBox.Show(command.CommandText.ToString());
    return command;
}

以上是我的疑问。单词“word”不代替实际值。


allTheseWords = textBoxAllTheseWords.Text.Split(' ');

2 个答案:

答案 0 :(得分:4)

对于初学者,当您在SQL CommandText中引用参数引用时(例如...... [fullreport] = '@word' ...),您实际上只是使用文字值'@word'。它不被解释为参数化查询。要做到这一点,你只需使用...... [fullreport] = @word ...)

其次,我没有 - 思考 - 您可以使用与循环中相同的参数名称分配多个参数。您添加的每个参数都应具有唯一的名称。

答案 1 :(得分:2)

您为每个单词使用相同的参数名称。您应该为每个名称使用不同的名称。您可以考虑附加索引或类似的其他内容,使其成为唯一的参数名称。