2

初心者:

こんにちは。データベース接続を開いたり閉じたりする方法を確認するためのヘルプを探しています。

解決しようとしている問題: データ アクセス層で実行する必要がある一連のストアド プロシージャがあります。

私のサービスは、DA メソッド Get(Request req) を次のように呼び出します。

public Data Get(Request request)
    {
        var data = new Data();

        data = GetData();
        data.AppleData = GetGrapeData();
        data.OrangeData = GetGrapeData();
        data.GrapeData = GetGrapeData();

        return data;
    }

ここで、すべての getmethods getdata、getgrapedata などはデータ アクセス クラスのプライベート メソッドであり、各メソッドで異なる SP が呼び出されます。

各メソッドで、次のようにデータベース接続を開いたり閉じたりしています。

{  try{   
  using (var connection = new SqlConnection(connectionString)
  using (var command = connection.CreateCommand())
   {
      connection.open();
      ExecuteSP();
      connection.Close();
   }
   }catch()
     {
     }
}

これを行う方法はありますか?接続を一度だけ開いたり閉じたりする必要がありますか? 各プライベートメソッドでtry catchを行っています。それは大丈夫ですか?上記の方法で問題はありますか?

4

3 に答える 3

1

はい、一度だけ接続を開くことができます。これを管理するためにクラスなどを使用できますが、単純なシナリオではやり過ぎのように思えます。

public Data Get(Request request)
{
    using (var connection = new SqlConnection(connectionString))
    {
        try
        {
            connection.open();

            var data = new Data();

            data = GetData(connection);
            data.AppleData = GetGrapeData(connection);
            data.OrangeData = GetGrapeData(connection);
            data.GrapeData = GetGrapeData(connection);

            return data;
        }
        finally
        {
            connection.close()
        }

    }
}

次に、ストアド プロシージャを呼び出すメソッドで:

private Date GetDate(SqlConnection connection)
{
    using (var command = connection.CreateCommand())
    {
        return ExecuteSP();
    }
}

例外処理は好きな場所に配置できますが、例外で何もしない場合は、絶対にキャッチしないでください。

于 2013-11-08T22:30:33.833 に答える
1

SQL Server では、接続を必要以上に開いたままにしたくありません。システムの他の部分、または別のシステムがそれらを待機している可能性があります。

次に、ORM についてです。EF または NHibernate のいずれかが、ほとんどのプログラマーよりもはるかに優れています。

于 2013-11-08T22:05:02.563 に答える