无法连接到远程MS Access数据库

问题描述:

我不断收到无法连接到远程MS Access数据库

InvalidOperationException:ExecuteReader需要一个开放且可用的Connection。该连接的当前状态已关闭。]

这是因为我的连接已关闭。我的连接字符串有什么问题?为什么不开放。

protected void Page_Load(object sender, EventArgs e) 
    { 
     // Declaration section 

     //OleDbConnection objDBConn; 
     OleDbCommand objCmd; 
     OleDbDataReader objDR; 

     //create connection object 
     System.Data.OleDb.OleDbConnection conn = new 
      System.Data.OleDb.OleDbConnection(); 

     // Modify the connection string and include any 
     // additional required properties for your database. 
     conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
      @"Data source= c:\inetpub\wwwroot\cm485a2\rreAccesscm485a2.mdb"; 

      // Create OleDbCommand object with SQL to execute 
      objCmd = new OleDbCommand("SELECT * " + 
          " FROM customers " + 
          " ORDER BY cust_id", conn); 

      // Create a DataReader and execute the command 
      objDR = objCmd.ExecuteReader(); 

      // Copy results from DataReader to DataGrid object 
      GridView1.DataSource = objDR; 
      GridView1.DataBind(); 


      //close all objects 
      conn.Close(); 
      conn.Dispose(); 

    } 
+3

尝试连接外的代码。 CS中的“=”之后的“”可能足以使其不起作用(它与其他值一起使用)。在使用它之前,请尝试一个明确的'conn.Open'。有时它会自动打开,有时不会,我不确定这些规则是什么 - 先执行它不会伤害,并且会与'conn.Close'对称(考虑使用'using') – 2011-03-17 16:23:34

+0

此访问分贝似乎并不遥远.... – T30 2014-04-09 08:10:58

您需要先打开连接。

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.open.aspx

还,我会用using要避免资源泄漏,这样的事情:

using (var connection = new OleDbConnection()) 
{ 
    connection.Open(); 
    using (var command = new OleDbCommand("connectionString")) 
    { 
    //Do my stuff. 
    } 
} 

这方面是容易留下由GC未收资源。

HTH

+0

是的,呃。 。 。哇。我想我看了太久。当你一说出来就回到我的电脑,我就觉得自己像个白痴。谢谢!!!! – Mike 2011-03-17 18:07:47

+0

好的,所以我还有另一个问题:我的弦怎么没有被接受?我实际上改变了路径,所以我知道它是正确的路径:'C:\ Program Files \ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ 129.2.168.163 \ cm485a2 \ rreAccesscm485a2.mdb'不是一个有效的路径。有任何想法吗? – Mike 2011-03-17 18:11:35

+0

迈克,检查:http://www.connectionstrings.com/。 .mdb文件可能被锁定,或者您没有权限。很难说。我会使用像C:\ myStuff \ DB \ rreAccesscm485a2.mdb这样更简单的路径。 – Marcote 2011-03-17 18:34:12

您需要在设置连接字符串后调用conn.Open()。

编辑:Woops,Markust打我给它40秒的xD

改变你的连接字符串如下...

conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
      @"Data source= c:\\inetpub\\wwwroot\\cm485a2\\rreAccesscm485a2.mdb"; 

*note: '\\' instead of '\' 
+0

OP和您的代码示例使用字符串文字字符'@',它告诉编译器将其转换为\,而不是将其视为转义变量。这里有一些关于字符串文字的官方文档。 (http://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx) – 2012-08-29 19:59:23