C#相当新,无论如何,我已经编写了这个初始化方法,它基本上创建了与MS2007 Access数据库的连接,使用4个DataTables填充DataSet,这是一些查询的结果。
public frmDBCompareForm()
{
///
/// Required for Windows Form Design support
///
InitializeComponent();
frmDBCompareForm_Initialize();
//
// TODO: Add any constructor code
//
if (_InstancePtr == null) _InstancePtr = this;
}
初始化方法的开始,包括一个正在填充的DataTable:
private void frmDBCompareForm_Initialize()
{
// Fill DataSet with 3 DataTables, these tables will be
// made up of the from sQuery.
try
{
// Create a new DataSet
DataSet dsSite1 = new DataSet();
// Set up the connection strings to HCAlias.accdb
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\HCAlias.accdb;Persist Security Info=False;";
con.Open();
//
// Table 1 - dtSite1Name [cmbSite1]
//
dtSite1Name = new DataTable();
string sQuery = "SELECT SourceName From Sites";
OleDbCommand cmdSite1Name = new OleDbCommand(sQuery, con);
OleDbDataAdapter myDASite1Name = new OleDbDataAdapter(cmdSite1Name);
myDASite1Name.Fill(dsSite1, "dtSite1Name");
cmbSite1.DataSource = dtSite1Name;
cmbSite2.DataSource = dtSite1Name;
有人能指出我正确的方向来按照我的方式行事吗?有关修复连接问题的提示或建议吗?我一直在谷歌上搜索老板,但似乎无法找到我所拥有的确切问题。
答案 0 :(得分:3)
您还需要关闭连接。 使用以下内容在finally块上添加:
using (var con = new OleDbConnection())
{
con.Open();
using (var cmd = new OleDbCommand("sqlquery", conn))
{
try
{
//do Stuff here
}
catch (OleDbException)
{
throw;
}
}
}
问候
答案 1 :(得分:2)
此错误是由于保持连接打开而引起的。它不一定会立即发生,但总是在相同数量的请求之后发生。
我建议使用using语句包装IDisposable db类:
using (OleDbConnection con = new OleDbConnection())
{
}
这会自动调用Dispose()方法的实现并关闭你的连接。
From MSDN:“using语句确保即使在对象上调用方法时发生异常也会调用Dispose。通过将对象放在try块中然后调用Dispose可以实现相同的结果在finally块中;实际上,这就是编译器如何翻译using语句。“ ......所以你最后不需要尝试抓住