我的主窗体有一个连接到数据库的数据网格视图。然后我有一个按钮,打开一个单独的表格,我在那个辅助表格上有几个按钮等。
我需要从辅助表单查询数据库,但我不确定如何在不创建全新连接的情况下执行此操作,由于程序已连接到数据库,因此我认为不需要。我只是不确定如何引用我在第一个表单中创建的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());
}
}
}
答案 0 :(得分:1)
从设计的角度来看,您应该考虑为表单创建数据访问层。您可以创建方法来为您检索这些Db结果,以便合并该代码并将其与表单功能分开。它可能只是一个小项目,但这是一个很好的实践,如果它是一个你想要成长的项目,你会希望它可以扩展。
像
这样的东西class SomethingDA {
static DataTable GetMyStuff(your params) {
// establish connection, get your results
}
}
然后,您可以致电SomethingDa.GetMyStuff()
获取所需内容。
答案 1 :(得分:0)
如果您使用“Using
”语句,则在运行此代码后将关闭您的连接。您实际上并不需要conn.Close()
和conn.Dispose()
语句。使用就是为你做的。
最好的办法是再次打开连接。尽快打开和关闭连接通常是一种很好的做法,但如果您的Access数据库是本地的,则可能不那么重要。这通常不会对性能产生太大影响,因为场景后面的OLE DB驱动程序将汇集连接并使其保持打开一段时间。