C# SqlCommand参数未正确替换

C# SqlCommand参数未正确替换,c#,sql,c#-4.0,parameters,sqlparameter,C#,Sql,C# 4.0,Parameters,Sqlparameter,以上是我的疑问。“word”一词不能代替实际值 每个单词都使用相同的参数名。您应该为每一个使用不同的名称。您可能会考虑追加索引或其他类似的东西,使其成为唯一的参数名。 对于初学者,当您引用SQL命令文本中的参数引用时(例如…… [FultReals]='Word '/Calp>……),您实际上只使用文字值 'Word '/COD>。它没有被解释为参数化查询。要做到这一点,您只需使用…[fullreport]=@word…) 其次,我不认为您可以像在循环中一样,使用相同的参数名分配多个参数。您添

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



每个单词都使用相同的参数名。您应该为每一个使用不同的名称。您可能会考虑追加索引或其他类似的东西,使其成为唯一的参数名。

对于初学者,当您引用SQL命令文本中的参数引用时(例如……<代码> [FultReals]='Word '/Calp>……),您实际上只使用文字值<代码> 'Word '/COD>。它没有被解释为参数化查询。要做到这一点,您只需使用…
[fullreport]=@word
…)


其次,我不认为您可以像在循环中一样,使用相同的参数名分配多个参数。您添加的每个参数都应该有一个唯一的名称。

Cocoa-Dev,您在其中使用或分配
word
的值?使用
command.Parameters.AddWithValues(@word,“variable word”)更改command.Parameters.Add
我非常确定,在添加参数之前,必须设置
SqlCommand
CommandText
。另外,这将创建一个无效的查询。。。退出循环并附加下一个字符串后,您将拥有
。。。和和skullbase.dbo.patients.Acc2=…
如果必须向
Where
子句添加一些条件,请查看如何更好地使用
Where
子句我想知道
字符串[]中存储了哪些值所有这些单词顺便说一下,这不是构建参数化查询的方式。这些值来自文本框。allTheseWords=textBoxAllTheseWords.Text.Split(“”);如何在数据周围添加单引号我删除了单引号和相同的问题。它没有被解释为wordWait的实际值……您是否修改了代码以使用LIKE而不是equality?此外,如果您在单词列表中循环并添加[fullreport]与列表中的单词相似(或相等)的条件,那么您可能会导致WHERE to evaluate为false,因为它很可能不会与所有单词相似或相等。除非您在单词中使用LIKE并嵌入通配符。在这一点上,我对目标有点困惑。我更新了代码,使参数不同,但仍然不起作用
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;
}
allTheseWords = textBoxAllTheseWords.Text.Split(' ');