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(' ');
答案 0 :(得分:4)
对于初学者,当您在SQL CommandText中引用参数引用时(例如...... [fullreport] = '@word'
...),您实际上只是使用文字值'@word'
。它不被解释为参数化查询。要做到这一点,你只需使用...... [fullreport] = @word
...)
其次,我没有 - 思考 - 您可以使用与循环中相同的参数名称分配多个参数。您添加的每个参数都应具有唯一的名称。
答案 1 :(得分:2)
您为每个单词使用相同的参数名称。您应该为每个名称使用不同的名称。您可以考虑附加索引或类似的其他内容,使其成为唯一的参数名称。