-1
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(' ');
4

2 に答える 2

4

手始めに、SQL CommandTextでパラメーター参照を引用する場合(例:... [fullreport] = '@word'...)、実際にはリテラル値を使用しているだけです'@word'。パラメータ化されたクエリとして解釈されていません。これを行うには、使用するだけです... [fullreport] = @word...)

第二に、ループで行っているのと同じパラメータ名で複数のパラメータを割り当てることができるとは思いません。追加する各パラメーターには、一意の名前を付ける必要があります。

于 2013-01-28T18:17:26.160 に答える
2

各単語に同じパラメータ名を使用しています。それぞれに異なる名前を使用する必要があります。インデックスなどを追加して、一意のパラメータ名にすることを検討してください。

于 2013-01-28T18:16:53.250 に答える