【发布时间】:2019-04-26 15:05:09
【问题描述】:
在开发连接到本地数据库的桌面应用程序期间,我将数据库移动到网络位置,现在每次调用 Connection.Close() 程序都会挂起 5-15 秒。当数据库存储在本地计算机上时,我很少会看到这个问题,但是现在它在网络上,几乎每次我尝试关闭()时它都会挂起。我对数据库的第一次调用我什至没有查询它,它只是一个测试连接,我打开和关闭以确保用户可以连接,但它仍然挂起太久。
我之前看到过这个问题,但除了“尝试使用 () {} 让 c# 清理它”之外,没有人可以提供修复的建议或解决方案。这不会以任何方式影响 Close() 时间。
连接字符串中是否有解决此问题的选项?有谁知道为什么会这样?
我使用的连接字符串是:
CONNECTION_STRING = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\NEWTORK\Shared\Database\Database.accdb; Persist Security Info=False;"
private void
Form_Login_Load(object sender, EventArgs e)
{
OleDbConnection Connection = new OleDbConnection();
Connection.ConnectionString = CONNECTION_STRING;
try
{
Console.Write("Connection Opening.....");
Connection.Open();
Console.WriteLine("Connection Opened");
Console.Write("Writing Status Text.....");
lbl_Status.Text = "Online";
Console.WriteLine("Written Status Text");
Console.Write("Connection Closing.....");
Connection.Close();
Console.WriteLine("Connection Closed");
}
catch (Exception Ex)
{
lbl_Status.Text = "Offline";
lbl_Status.ForeColor = System.Drawing.Color.FromArgb(255, 0, 0);
MessageBox.Show("Could not connect to Database");
}
}
在我的输出窗口中,我立即看到打开消息和写入状态消息,但应用程序在 'Console.Write("Connection Closing.....");' 之前挂起线。 5-15 秒后,关闭消息出现在窗口中。
应用程序中有许多查询数据库的连接,并且在尝试关闭所有连接之前似乎挂起。我似乎确实注意到在不关闭应用程序的情况下重复相同的查询有时会导致重复关闭的关闭时间更快,但它总是在第一次尝试任何查询时挂起。
【问题讨论】:
-
将代码放入 BackGroundWorker,这样表单就不会挂起。我已经这样做了很多次了。
-
@jdweng 我以前从未使用过 BackGroundWorker,所以很可能我做错了什么。我在这段代码中添加了一个,虽然它确实允许在关闭原始连接之前显示表单,但它也允许我尝试登录到应用程序,该应用程序也打开了与数据库的连接并抛出异常,因为它正在尝试在前一个连接关闭之前打开一个新连接。
-
@G。 Maniatis 你需要等到 BackgroundWorker 完成,通过使用
.RunWorkerCompleted事件。
标签: c# winforms ms-access oledb