1

Winform に 10 個のテキスト ボックスがあり、これらのテキスト ボックスに入力したテキストを SQL データベース テーブルの 10 列に保存する必要があります。だから、これのために私は書く:

INSERT INTO item (c1,c2,c3...,c10) values (@a,@b....@j) 

cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
.
.
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;

または、テキストボックスごとに 10 個の個別のクエリ:

INSERT INTO item (c1) values (@a)
cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

INSERT INTO item (c2) values (@b) 
cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
INSERT INTO item (c10) values (@j)
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;

または、効率的なコードを提案してください。

単一のステートメントで cmd に複数のパラメータを追加する方法は? 出来ますか?

4

4 に答える 4

10

Parameters.AddWithValue()メソッドを使用できると思います。

cmd.Parameters.AddWithValue("@j",textbox10.Text);
cmd.Parameters.AddWithValue("@k",textbox11.Text);
cmd.Parameters.AddWithValue("@l",textbox12.Text);
于 2011-03-31T05:08:48.357 に答える
10

次のような拡張メソッドを使用できます。

public static class DbCommandExtensions
{
    public static void AddInputParameters<T>(this IDbCommand cmd,
        T parameters) where T : class
    {
        foreach (var prop in parameters.GetType().GetProperties())
        {
            object val = prop.GetValue(parameters, null);
            var p = cmd.CreateParameter();
            p.ParameterName = prop.Name;
            p.Value = val ?? DBNull.Value;
            cmd.Parameters.Add(p);
        }
    }
}

次に、次のように呼び出します。

cmd.AddInputParameters(new { a = textBox1.Text, b = TextBox2.Text, /* etc */ });

いくつかのプロジェクトで問題なく使用しました。

于 2011-03-31T04:51:57.837 に答える
2

あなたの質問で提案する2つの「解決策」は、意味的に異なります。どちらを使用するかは、テーブル レイアウトによって異なります。

最初のソリューションはテーブルに 1 つのレコードを挿入し、2 番目の挿入ステートメントは値 (テキスト ボックス) ごとに 1 つのレコード (行) を挿入します。

そのテーブルに何を保存しようとしているのかがわからないため、ここで良い答えを出すのは困難です。したがって、どのように保存する必要があるかはわかりません (どのように保存するかは、呼び出す方法に本質的に依存しています) SQL 挿入ステートメント)。

于 2011-03-31T08:16:45.140 に答える
0

次のような関数を使用できます。

void AddParams(DBCommand cmd,params object[] parameters)
{
    if (parameters != null)
    {
        int index = 0;
        while (index < parameters.Length)
        {
            cmd.Parameters.AddWithValue("@"+(string)parameters[index], parameters[index + 1]);
            index += 2;
        }
    }
}

おそらく最高のものではありませんが、機能的です。これをリンクに呼び出します:

AddParams(a,"test1",b,3,c,DateTime.Now);

または、@Matt ハミルトンから提案されたような拡張機能を使用して、この関数を DBCommand クラスに追加できます。

于 2011-03-31T08:13:09.597 に答える