2
public class db
{
    public static string connectionString =
           WebConfigurationManager.ConnectionStrings["connectString"].ConnectionString;
    public static SqlConnection OpenConnection() 
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}

私はこのようなコードを見て、それは間違っていると叫びます! ASP.NET (2.0) 用です。それが間違っていることは理解しています。

1 つは SqlConnection を開いて返すべきではなく、2 つはなぜ静的な SqlConnection を作成するのでしょうか。複数の人が同時に使用しようとすると、問題が発生しませんか?

4

4 に答える 4

12

静的なのはOpenConnection()接続を返すメソッドです。ただし、毎回新しい接続が返されます (必要に応じて、呼び出し元がこの接続オブジェクトの破棄を担当することを前提としています)。

つまり、表示されている db クラスはシングルトンではありません。混乱は、OpenConnection() メソッドを使用するために db のインスタンスをインスタンス化する必要がない (静的であるため) という事実から生じる可能性があり、残りのコードには次のような複数のスニペットが含まれる場合があります。

myConn = db.OpenConnection();
-- then do something with myConn
于 2009-10-19T22:32:16.560 に答える
3

質問が何であるかは100%わかりませんが、これに答えるには

複数の人が同時に使用しようとすると、問題が発生しませんか?

いいえ、OpenConnection() を呼び出すたびに新しい SqlConnection インスタンスが構築されるため、問題はありません。それは、コードが他の理由でガベージではないという意味ではありません。少なくとも、このメソッドの呼び出しが次のようになることを願っています。

using(var conn = db.OpenConnection())
{
  // stuff
}
于 2009-10-19T22:43:58.253 に答える
0

接続オブジェクトは、トランザクションを実行するメソッドにスコープする必要があります。スレッド間で同じ接続オブジェクトを共有すると、接続プールが破損します。SQLDataReader.GetOrdinal()でこの質問を参照してください。IndexOutOfRangeで失敗することはめったにありません。

于 2010-10-04T18:51:40.727 に答える
0

「間違っているという悲鳴」と言って、「シングルトン」という用語を間違って適用することはできません。単一の静的接続が不適切なアプローチであるのはなぜですか? 毎回再作成しなければ、アプリケーション全体で接続を共有できます。愚かな悲鳴を上げているフリッグンSQL呼び出しごとに、作成、オープン、クローズする必要がありますか。いずれにせよ、ADO がこれを管理する必要があります。

于 2010-03-04T17:50:43.080 に答える