3

データベースでインデックス付きビューを使用しています。したがって、クライアントには、それらを呼び出すためのセッション接続設定が必要です。私はado.net接続、コマンドを使用してストアドプロシージャを呼び出しています。ストアド プロシージャを呼び出す必要があるたびに、接続を作成し (接続プールでこれをすばやく実行できることを願っています)、これらの設定を現在の接続に適用するコマンドを実行します。

// some code to create a new connection
 //...
 //... 

 if (connection.State != ConnectionState.Open)
 {
     connection.Open();
 }



    using (var cmd = connection.CreateCommand())
    {
        cmd.CommandType = CommandType.Text;
        cmd.CommandText =
                            @"
                    SET ANSI_NULLS ON
                    SET ANSI_PADDING ON
                    SET ANSI_WARNINGS ON
                    SET ARITHABORT ON
                    SET CONCAT_NULL_YIELDS_NULL ON
                    SET QUOTED_IDENTIFIER ON
                    SET NUMERIC_ROUNDABORT OFF";
        cmd.ExecuteNonQuery();
    }

その他の考え:ストアドプロシージャのすべての呼び出しの前にこれらの設定を追加します:

command.CommandText = 'SET....';
command.CommandText += ' EXEC MyStroredProc @...'; 

この解決策はパフォーマンスの問題を引き起こしますね。

毎回新しい接続を作成する必要がある場合、どうすれば余分な作業を避けることができますか? これらの設定を自動的に適用する方法は?

解決:

ALTER DATABASE [MyDB] 
    SET 
    ANSI_NULLS ON,
    ANSI_PADDING ON,
    ANSI_WARNINGS ON,
    ARITHABORT ON,
    CONCAT_NULL_YIELDS_NULL ON,
    QUOTED_IDENTIFIER ON,
    NUMERIC_ROUNDABORT OFF
4

1 に答える 1

6

ドキュメントによると、これらの設定をデータベース レベルで設定できます。

ALTER DATABASE を使用して設定されたデータベース設定は、データベース レベルでのみ有効であり、明示的に設定された場合にのみ有効になります。データベース設定は、sp_configure を使用して設定されたインスタンス オプション設定をオーバーライドします。

あなたはそれを試しましたか?

残念ながら、このプロパティは接続文字列で設定できないため、次の SQL を使用します。

ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc
于 2011-09-07T08:37:27.377 に答える