0

私は以下のようなSQLクエリを持っています:

Select CatId 
From tbl_T2H_Category 
Where Category IN ('Category3', 'Category4', 'Category6')

今私が欲しいのは、 IN 句内の値をチェックボックスリストから動的に追加する必要があることです。コントロールからカンマ区切りの値を取得し、それを次のようにSQLクエリに渡しています。

string mystring = "Category3,Category4,Category6";
cmd.commanText = "Select CatId From tbl_T2H_Category Where Category IN (" + mystring + ")";

SQL は文字列が "'" "'" (一重引用符) 内にある場合にのみ文字列を認識するため、これは SQL 側では実行されません。適切なクエリを書くのを手伝ってください。

4

6 に答える 6

5

テーブル値パラメーターを使用したい。ここに示されている MSDN の記事は、私ができるよりも優れていることを示しています。

http://msdn.microsoft.com/en-us/library/bb675163.aspx

于 2013-06-11T14:23:43.540 に答える
1

これは、テーブル値パラメーターを使用して対処するのが最適です。

最初のステップは、タイプを作成することです。

CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX) NOT NULL);

次のステップは、コンマ区切りのリストから C# でデータテーブルを作成して、SqlCommand に渡すことです。

string mystring = "Category3,Category4,Category6";
string[] myarray = mystring.Split(",".ToCharArray());

DataTable table = new DataTable();
table.Columns.Add("Value", typeof(string));

for (int i = 0; i < myarray.Length; i++)
{
    var row = table.NewRow();
    row[0] = myarray[i];
    table.Rows.Add(row);
}

最後に、これを SqlCommand に渡すことができます。

cmd.commanText = "Select CatId From tbl_T2H_Category Where Category IN (SELECT Value FROM @Strings)";
cmd.Parameters.Add(new SqlParameter("@Strings", SqlDbType.Structured)).Value = table;
于 2013-06-11T14:30:53.860 に答える
0

すべてのカテゴリを一重引用符で囲むだけですか?

何かのようなもの

var mystring = "'Category3','Category4','Category6'"
于 2013-06-11T14:22:53.943 に答える
0

コンマ区切りの値を配列に分割します

 string[] myArr = commaSepString.Split(',');

そして、このようにコンマで囲まれたコンマでそれらを結合します

 string newString = "'"+myArr.Join("','")+"'";
于 2013-06-11T14:24:13.070 に答える
0

これを試して...

public String returnCategories(string categories) 
    {
        string categoriesConc = "";

        string[] split = categories.Split(',');

        for (int i = 0; i < split.Length; i++) 
        {
            if (string.IsNullOrEmpty(categoriesConc))
            {
                categoriesConc = split[i].ToString();
            }
            else 
            {
                categoriesConc = categoriesConc + "," + split[i].ToString();
            }
        }

        return categoriesConc;
    }
于 2013-06-11T14:39:10.390 に答える