【问题标题】:C# - OleDbConnection.Open() causing a crashC# - OleDbConnection.Open() 导致崩溃
【发布时间】:2011-09-23 04:30:08
【问题描述】:

对 C# 来说相当新,无论如何,我有我编写的这个 Initialise 方法,它基本上创建一个到 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;
    }

以及初始化方法的开始,包括正在填充的数据表之一:

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;

谁能指出我按照我的方式做这件事的正确方向?有什么提示或建议可以解决该连接问题?我一直像老板一样在谷歌上搜索,但似乎找不到我遇到的确切问题。

【问题讨论】:

    标签: c# .net oledb oledbconnection


    【解决方案1】:

    此错误是由于保持连接打开而导致的。它不一定会立即发生,但总是在相同数量的请求之后发生。

    我建议使用 using 语句包装您的 IDisposable db 类:

    using (OleDbConnection con = new OleDbConnection())
    {
    
    }
    

    这将自动调用 Dispose() 方法的实现并关闭您的连接。

    From MSDN : "using 语句确保调用 Dispose,即使在您调用对象上的方法时发生异常。您可以通过将对象放在 try 块中,然后在finally 块;事实上,这就是编译器翻译 using 语句的方式。” ...所以你不需要你的 try catch finally

    【讨论】:

      【解决方案2】:

      您还需要关闭连接。 在 finally 块上添加:

              using (var con = new OleDbConnection())
              {
                  con.Open();
                  using (var cmd = new OleDbCommand("sqlquery", conn))
                  {
      
                      try
                      {
                                   //do Stuff here
                      }
                      catch (OleDbException)
                      {
      
                          throw;
                      }
      
                  }
               }
      

      问候

      【讨论】:

      • @john, finally 块是不需要的,因为如果发生异常,使用块会关闭连接。
      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多