C# - OleDbConnection.Open()导致崩溃

时间:2011-06-27 01:13:18

标签: c# .net oledb oledbconnection

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;

有人能指出我正确的方向来按照我的方式行事吗?有关修复连接问题的提示或建议吗?我一直在谷歌上搜索老板,但似乎无法找到我所拥有的确切问题。

2 个答案:

答案 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语句。“ ......所以你最后不需要尝试抓住