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,然后使用它。让连接池和(大概)语句池处理使其高效。

有一个静态SqlConnectionSqlCommand只是自找麻烦,IMO。

于 2012-08-01T18:28:41.343 回答