1

シングルスレッドアプリケーションでは、以下のパターンを使用してSqlCommandsを作成することがよくあります。

現在、Webサービスを作成していますが、このパターンが複数のクライアントからの要求を同時に処理することに耐えられないのではないかと心配しています。

関数をロックして単一のクライアントのみを一度に実行できるようにする以外に、複数のクライアントに対して単一の「準備された」SqlCommandを使用する方法はありますか?

    private static SqlCommand cmdInsertRecord;

    public static void InsertRecord(String parameter1, String parameter2, SqlConnection connection, SqlTransaction transaction)
    {
        if (cmdInsertRecord == null)
        {
            //Create command
            cmdInsertRecord = connection.CreateCommand();
            cmdInsertRecord.CommandText = @"SQL QUERY";

            //Add parameters to command
            cmdInsertRecord.Parameters.Add("@Parameter1", SqlDbType.Int);
            cmdInsertRecord.Parameters.Add("@Parameter2", SqlDbType.DateTime);

            //Prepare the command for use
            cmdInsertRecord.Prepare();
        }

        cmdInsertRecord.Transaction = transaction;

        //Note SetParameter is an extension that handles null -> DBNull.
        cmdInsertRecord.SetParameter("@Parameter1", parameter1);
        cmdInsertRecord.SetParameter("@Parameter2", parameter2);

        cmdInsertRecord.ExecuteNonQuery();
    }
4

1 に答える 1

2

関数をロックして単一のクライアントのみを一度に実行できるようにする以外に、複数のクライアントに対して単一の「準備された」SqlCommandを使用する方法はありますか?

あなたはすべきではありません-なぜあなたはしたいのですか?

SqlConnection毎回新しいものを作成しSqlCommand、それを使用する必要があります。接続プールと(おそらく)ステートメントプールに処理を任せて、効率的にします。

静的なSqlConnection、またはSqlCommand単に問題を求めている、IMO。

于 2012-08-01T18:28:41.343 に答える