ADODB 连接 - 错误:未找到数据源名称且未指定默认驱动程序

Posted

技术标签:

【中文标题】ADODB 连接 - 错误:未找到数据源名称且未指定默认驱动程序【英文标题】:ADODB Connection - Error: Data source name not found and no default driver specified 【发布时间】:2014-12-16 05:44:52 【问题描述】:

我过去使用 ODBC 连接到 Access DB 时从未遇到过问题。现在我尝试使用 ADO/OLEDB 进行连接,但出现此错误(无 DSN 连接):

System.Runtime.InteropServices.COMException: [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序。

我不再使用 ODBC。正如我所说,我正在使用 ADO/OLEDB。这是我的代码:

var conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb";
// I've also tried the one below, same error
// var conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\test.mdb";
var con = new ADODB.Connection( conString );
// bombs here
con.Open();

我几乎查看了 Google 和本网站关于 MS Access 错误的所有内容。我尝试将我的项目改回 32 位 (x86)。似乎没有任何效果。

有人有什么想法吗?

更新: 我需要一个 ADODB 连接,因为我使用的是需要 ADODB 连接的 ADOX。

var cat = new Catalog();
// this line below will bomb for ODBC or OLEDB
cat.ActiveConnection = con;

【问题讨论】:

请为ADODB.Connection(string)添加代码 呃,我不听。就在问题的正上方。 机器需要安装OLEDB驱动。来自:microsoft.com/en-in/download/details.aspx?id=13255 我已经安装了 Office。他们没有安装 Office? 我在一些驱动程序版本不兼容的机器上发现了这个问题,用于创建连接。 【参考方案1】:

尝试建立 OLEDB 连接。另请提及输出。

Imports System.Data.OleDb
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim connetionString As String
    Dim cnn As OleDbConnection
    connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=yourdatabasename.mdb;"
    cnn = New OleDbConnection(connetionString)
    Try
        cnn.Open()
        MsgBox("Connection Open ! ")
        cnn.Close()
    Catch ex As Exception
        MsgBox("Can not open connection ! ")
    End Try
End Sub
End Class

您需要在建立连接时提供特定的驱动程序信息。按照下一步代码。

Imports System.Data.Odbc
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim connetionString As String
    Dim cnn As OdbcConnection
    connetionString = "Driver=Microsoft Access Driver (*.mdb);DBQ=yourdatabasename.mdb;"
    cnn = New OdbcConnection(connetionString)
    Try
        cnn.Open()
        MsgBox("Connection Open ! ")
        cnn.Close()
    Catch ex As Exception
        MsgBox("Can not open connection ! ")
    End Try
End Sub
End Class

【讨论】:

我需要使用 ADODB 连接。看我的更新。我可以使用 OLEDB 进行连接,但我无法将这种连接类型用于 ADOX。 第二个代码是相同的。你需要在连接字符串时指定驱动程序,否则它不会工作。 您提供的代码适用于 OLEDB 和 ODBC。我需要一个 ADODB 连接。我不能将 OLEDB 或 ODBC 与 ADOX 对象一起使用。【参考方案2】:

您必须安装连接所需的 OLEDB 驱动程序:

连接字符串:

<add name="ConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source d:\\test.mdb;Persist Security Info=False;" />

驱动程序可以从以下链接安装: http://www.microsoft.com/en-in/download/details.aspx?id=13255

【讨论】:

安装这些驱动程序后,我在 ADOX.Catalog().Create(conString) 命令上收到此错误:发生“System.Runtime.InteropServices.SEHException”类型的异常 这个新异常与 OLEDB 连接无关。请使用调试签入项目GSS.BaseballIO 如果我返回并手动创建 mdb 文件并尝试连接 ADODB.Connection,我会收到原始错误(未找到数据源名称且未指定默认驱动程序)。所以现在我仍然无法使用 ADODB 进行连接,现在我什至无法在运行时创建数据库。 Per Microsoft:“SEHException 类处理从非托管代码引发的 SEH 错误”我的所有代码都是托管的,但 COM 中发生的情况除外。 另外,在安装您提到的驱动程序之前,我没有收到该错误。在安装驱动程序之前,我的代码(至少对于那段代码)运行良好。【参考方案3】:

我只是在努力解决这个问题,然后我找到了一个对我有用的奇怪解决方案:

        // NOTE: this way doesn't work.  It throws an error:
        //  System.RuntimeInteropServices.COMException (0x80004005): [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified at ADODB.Connection.Open
        //_connection = new Connection(_connectionString);
        //_connection.Open();

        // This way *does* work.
        _connection = new Connection();
        _connection.Open(_connectionString, null, null, 0);

【讨论】:

以上是关于ADODB 连接 - 错误:未找到数据源名称且未指定默认驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

未找到数据源名称且未指定默认驱动程序

Python SQLAlchemy:未找到数据源名称且未指定默认驱动程序

PDO_ODBC:未找到数据源名称且未指定默认驱动程序

Odbc 连接 - [ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序

错误:[Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序

R 中的 ODBC 库 - 获取“未找到数据源名称且未指定默认驱动程序”错误