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

Posted

技术标签:

【中文标题】无法连接到远程 MS Access 数据库【英文标题】:Cant connect to remote MS Access database 【发布时间】:2011-03-17 16:20:39 【问题描述】:

我一直收到一个

InvalidOperationException:ExecuteReader 需要打开且可用的连接。连接的当前状态为关闭。]

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

    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();

    

【问题讨论】:

尝试在代码之外进行连接。 CS中“=”之后的“”可能足以使其不起作用(它与其他值一起使用)。还可以在使用之前尝试明确的conn.Open。有时它会自动打开,有时不会自动打开,我不确定规则是什么——首先这样做不会造成伤害,并且会与 conn.Close 对称(考虑使用 using 这个访问数据库好像不是远程的...... 【参考方案1】:

您需要先打开连接。

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

【讨论】:

是的,嗯。 . .哇。我觉得我看得太久了。当你一说完我就回到我的电脑前,我觉得自己像个白痴。谢谢!!!! 好的,我还有一个问题:为什么我的字符串没有被接受?我实际上更改了路径,所以我知道它是正确的路径:'C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\129.2.168.163\cm485a2\rreAccesscm485a2.mdb' 不是有效路径。有什么想法吗? 迈克,检查:connectionstrings.com。也许 .mdb 文件已被锁定,或者您没有权限。很难说。我会使用更简单的路径,例如 C:\myStuff\DB\rreAccesscm485a2.mdb。【参考方案2】:

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

编辑:糟糕,Markust 领先我 40 秒,xD

【讨论】:

【参考方案3】:

如下更改连接字符串...

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

*note: '\\' instead of '\'

【讨论】:

OP 和您的代码示例使用字符串文字字符@,它告诉编译器按字面意思使用 \ 而不是将其视为转义变量。这是一些关于字符串文字的官方文档。 (msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx)

以上是关于无法连接到远程 MS Access 数据库的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Java WebService 连接到 MS Access 数据库

无法使用 DBeaver 和默认的 UCanAccess-5.0.0 驱动程序连接到 MS Access mdb 文件

使用 PHP 连接远程 MS Access DB

通过连接到 MS Access 的 Java Eclipse 无法使用删除查询删除记录

使用 MS Access 和 ODBC 连接到远程 PostgreSQL

将 Excel 连接到 Access