sql >> データベース >  >> RDS >> Sqlserver

C#で複数の要求に対して単一のSQL Server接続インスタンスを開いたままにする方法は?

    ADO.NETのSqlConnection は接続プールを実装しています。これは、SqlConnectionのインスタンスを閉じるか破棄する場合を意味します。 、基になる接続は単にプールに戻ります。 SqlConnectionの別のインスタンスの場合 が開かれ、接続プールで接続が利用可能になると、その接続が使用されます。
    実際、SQLServer接続プールのMicrosoftドキュメントページには次のように明記されています。

    注意
    接続がプールに戻されるように、使用が終了したら常に接続を閉じることを強くお勧めします。これを行うには、ConnectionオブジェクトのCloseメソッドまたはDisposeメソッドを使用するか、C#のusingステートメントまたはVisualBasicのUsingステートメント内のすべての接続を開きます。明示的に閉じられていない接続は、プールに追加または戻されない場合があります。詳細については、「ステートメントの使用」または「方法:VisualBasicのシステムリソースを破棄する」を参照してください。

    これは、SqlConnectionを使用するベストプラクティスの方法を意味します これは:

    using(var con = new SqlConnection(connectionString))
    {
        // your sql stuff goes here...
    }
    

    ところで、SqlCommandSqlDataReader およびSqlDataAdapter IDisposableも実装します インターフェースなので、それらもusingのコンテキストで使用する必要があります ステートメント:

    using(var con = new SqlConnection(connectionString))
    {
        using(var cmd = new SqlCommand(sql, con))
        {
            // prepare command here - parameters and stuff like that
    
            // either
            using(var reader = cmd.ExecuteReader())
            {
    
            }
    
            // or 
            using(var adapter = new SqlDataAdapter(cmd))
            {
    
            }
    
        }
    }
    


    1. VBA用の読み取り可能なコードの記述–Try*パターン

    2. T-SQLを使用してSQLServerのCHECK制約の名前を変更します

    3. DISTINCT値の発生をカウントします

    4. SQL Serverで参照エンティティを検索します:sys.dm_sql_referencing_entities()