5

どうやって作るのが一番いいのか考えてみましたcentral SqlConnection。プログラミングを始めた最初のことは、作成した各フォームに次のようC#に入れることでした。SqlConnection

public partial class form1 : Form
{
    SqlConnection conn = new SqlConnection(
"Data Source=SERVER\\SQL;Initial Catalog=DataBase;User ID=user;Password=pass");

    public form1 ()
    {
        InitializeComponent();
        timer1.Start();
    }
   }

centralここで、1 つの接続を作成し、各フォームの開始時にこれらのコードをすべて取り除きたいと思います。

私はそのクラスがそれを行うための最良の方法だと思いました. 他に良い作り方があれば教えていただきたいです。

初心者のため、私のレベルの説明をお許しください。

回答/コメント/ご意見ありがとうございます。

4

5 に答える 5

3

SqlConnection 情報を格納する標準的な方法は、app.config や web.config などの構成ファイルを使用することです。または、独自の構成ファイルを作成することもできます。

その後、ハードコーディングされた接続設定ではなく、ConfigurationManager.ConnectionStrings["YourConnectionStringName"].ConnectionString を使用します。

于 2013-07-24T13:02:49.180 に答える
1

(ネットワーク エラーが原因で) 切断された場合、アプリが動作しなくなるため、グローバル接続は 1 つにしないでください。また、トランザクションを誤って開いたままにしたり、コードの他の部分が想定していないオプションを設定したりするバグが発生する可能性があります。

代わりに、接続文字列をグローバルに保存し、必要になるたびに新しい接続を作成してください。毎回新しく始める方が良いです。

static class ConnectionFactory
{
 public static SqlConnection Create() {
  return new SqlConnection(GetConnectionStringSomehow());
 }
}

次のように使用します。

using (var conn = ConnectionFactory.Create()) {
 //do something
}
于 2013-07-24T13:08:39.453 に答える
0

グローバルにアクセス可能なSQL接続オブジェクトが1つだけ必要な場合は、静的コンストラクターを持つ静的クラスを使用してすべてがアクセスできるように、静的クラスを調べてください。

私はこれをしませんが、学習していれば害はありませんが、静的/シングルトンは、アプリケーション全体でコンポーネントのインスタンスを 1 つ持つためによく使用されます。

// Simple static example
public static class DatabaseConnection
{
    public static IDBConnection ActiveConnection {get; private set;}

    static DatabaseConnection()
    {
        var myConnectionString = // get your connection string;
        ActiveConnection = new SqlConnection(myConnectionString);
        ActiveConnection.Connect(); // This is bad, really should be in a using
    }
}

// Simple static usage
DatabaseConnection.ActiveConnection.ExecuteQuery(blah);

問題は、そのリソースを制御できず、アプリが閉じるまで接続を閉じないことです。これは悪い習慣であるため、グローバルにアクセス可能な機能を維持しながら、これをわずかに改善できます。

// Better static example using actions
public static class DatabaseConnection
{
    private static string connectionString;

    public static void OpenConnectionAnd(Action<Connection> actionToDo)
    {
        using(var connection = new SqlConnection(this.connectionString))
        {
            connection.Connect();
            actionToDo.Invoke(connection);
            connection.Disconnect();
        }       
    }

    static DatabaseConnection()
    {
        this.connectionString = // get your connection string;
    }
}

// Better usage example
DatabaseConnection.OpenConnectionAnd(x => x.Execute(blah));

上記を頭のてっぺんに書いているだけなので、構文は100%正しいとは限りませんが、有用なほど十分に近いはずです。

于 2013-07-24T13:04:28.897 に答える
0

データ アクセス パターンを調べて、SQL とのすべてのインターフェイスを処理できます。

これは通常、推奨されるアプローチであるため、複数のフォーム (または場合によってはどのような場合でも) が、データを取得および保存する同じメソッドにアクセスできます。

使い方についての質問です(回答あり)。

于 2013-07-24T13:04:51.923 に答える