1

データベースに接続されたデータグリッド ビューを持つメイン フォームがあります。次に、別のフォームを開くボタンがあり、そのセカンダリフォームにいくつかのボタンなどがあります。

セカンダリフォームからデータベースにクエリを実行する必要がありますが、プログラムが既にデータベースに接続されているため、まったく新しい接続を作成せずにそれを行う方法がわかりません。最初のフォームで作成した oleDB 接続を参照する方法がわかりません (コーディングはしていません。datagridview の小さな矢印を使用して、Visual Studio を使用してデータベースに接続しました)。

新しい接続を作成する代わりに、プライマリ フォームで作成された最初の接続を参照するにはどうすればよいでしょうか。

これが私のコードです:

//parameterized update query
string updateCommandString = "UPDATE RoomsTable SET [Date Checked]=@checkedDate WHERE ID = @id";
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\spreston\documents\visual studio 2012\Projects\roomChecksProgram\roomChecksProgram\roomsBase.accdb"))
{

    using (OleDbCommand updateCommand = new OleDbCommand())
    {
        OleDbTransaction transaction = null;
        updateCommand.Connection = conn;
        updateCommand.Transaction = transaction;    
        updateCommand.CommandText = updateCommandString;
        updateCommand.CommandType = CommandType.Text;
        updateCommand.Parameters.AddWithValue("@checkedDate", this.dateTimePicker1.Value.ToShortDateString());
        updateCommand.Parameters.AddWithValue("@id", row.roomID);
        try
        {
            conn.Open();
            transaction = conn.BeginTransaction();
            updateCommand.Transaction = transaction;
            updateCommand.ExecuteNonQuery();
            transaction.Commit();
            conn.Close();
            conn.Dispose();
        }
        catch(OleDbException ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }
}
4

2 に答える 2

1

設計の観点から、フォームが利用するデータ アクセス層を作成することを検討する必要があります。これらの Db 結果を取得するメソッドを作成して、そのコードを統合し、フォーム機能から分離することができます。これは単なる小さなプロジェクトかもしれませんが、良い習慣です。成長させたいプロジェクトの場合は、拡張できるようにレイアウトする必要があります。

何かのようなもの

class SomethingDA {
   static DataTable GetMyStuff(your params) {
     // establish connection, get your results
   }
}

その後、電話SomethingDa.GetMyStuff()して必要なものを入手できます。

于 2012-09-30T23:31:07.650 に答える
0

" " ステートメントを使用している場合Using、このコードの実行後に接続が閉じられます。conn.Close()実際にはandconn.Dispose()ステートメントは必要ありません。を使用すると、それが行われます。

最善の策は、接続を再度開くことです。Access DB がローカルの場合はそれほど重要ではありませんが、通常は接続をできるだけ早く開いて閉じることをお勧めします。これは通常、バックグラウンドで OLE DB ドライバーが接続をプールし、一定期間開いたままにするため、パフォーマンスに大きな影響を与えることはありません。

于 2012-09-30T23:13:19.463 に答える