无法连接到远程 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 文件
通过连接到 MS Access 的 Java Eclipse 无法使用删除查询删除记录