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 回答