1

私は現在、50 ほどの質問に回答と関連コンテンツ (メモなど) を追加するこの機能 (以下を参照) を持っています。ユーザーから書き込み権限を削除できるように、データベースをストアド プロシージャに変更してデータベースを安全にしようとしています。これは正しいアプローチですか?

テーブル値パラメーターを使用する必要がありますか? または、ストアド プロシージャを 50 回呼び出す必要がありますか? 前者は正しいように感じますが、後者は非効率だと思いますが、コードで見栄えがよくなりますか?

または...より良い方法/アプローチはありますか?

int AddAnswersToTable()
{
    var Cmd = Db.NewCommand();
    var Str = new StringBuilder("INSERT INTO answers (qu_id,answer,notes) VALUES");
    int i = 1;
    string Join = string.Empty;

    foreach (var Qu in Page)
    {
        Str.Append(Join);
        Str.Append("(");

        Str.Append((Name = "@qu_id" + i) + ",");
        Cmd.Parameters.AddWithValue(Name, Qu.QuId);

        Str.Append((Name = "@ans" + i) + ",");
        Cmd.Parameters.AddWithValue(Name, Qu.Answer.Truncate(499));

        Str.Append((Name = "@notes" + i) + ",");
        Cmd.Parameters.AddWithValue(Name, Qu.Notes.Truncate(499));

        Str.Append(")");
        Join = ",";
        i++;
    }

    return Cmd.ExecuteNonQuery(Str.ToString());
}

前もって感謝します。

4

2 に答える 2

1

私はテーブル値パラメーターを使用していないので、それが正しいかどうかはわかりません。ただし、別のオプションとして、SqlDataAdapter を使用してバッチ更新を行うこともできます。「UpdateBatchSize」プロパティを設定すると、一度に複数の値/行を送信できます。

MSDN でそれについて読むことができます: http://msdn.microsoft.com/en-us/library/aadf8fk2 ​​%28v=vs.100%29.aspx

また、ストアド プロシージャが使用されている記事は次のとおりです

于 2013-10-15T06:12:28.563 に答える
1

ストアド プロシージャが正しいアプローチであるかどうかは、宗教的な問題です。そうだと思います、FWIW。

プロシージャを 50 回呼び出す方が簡単ですが、どちらのアプローチもそれ自体は間違っていません。

于 2013-10-15T06:10:55.430 に答える