错误 [HY000] 一般错误:无效的文件 dsn ''

Posted

技术标签:

【中文标题】错误 [HY000] 一般错误:无效的文件 dsn \'\'【英文标题】:ERROR [HY000] General error: Invalid file dsn ''错误 [HY000] 一般错误:无效的文件 dsn '' 【发布时间】:2017-06-02 12:19:17 【问题描述】:

我正在尝试使用this code snippet 我收到以下错误消息:

System.Data.Odbc.OdbcException (0x80131937): ERROR [HY000] General error: Invalid file dsn ''
   at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
   at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
   at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection o
wningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldC
onnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnecti
onOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.Odbc.OdbcConnection.Open()

代码,精简后是:

open System
open System.Data.Odbc

let connectToAccess filename =
    let connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;FileDSN=" + filename + ";User Id=admin;Password=;"
    new OdbcConnection(connectionString)

let connectToDb() =
    let accessFile = Environment.CurrentDirectory + @"\folder\filename.accdb"
    connectToAccess accessFile

let connection = connectToDb()
connection.Open()

我确实检查并验证了路径和文件名是否正确。我也试过:

相对路径 一个虚拟访问文件(以确保文件没有损坏) 较旧的 *.msb 文件 在终端运行代码 将代码作为可执行文件运行 - 确保路径仍然正常

【问题讨论】:

您是否尝试过硬编码完整的绝对路径,而不使用Environment.CurrentDirectory 是的,我做到了。不过是个好主意。 【参考方案1】:

您将 DSN 与 accdb 文件与 accdb 文件混淆了。

FileDSN 包含有关如何连接到数据库的详细信息,但您传递的是数据库路径,而不是包含有关如何连接到数据库的详细信息的文件的路径。

此外,您使用 Microsoft.Jet.OLEDB.4.0 作为提供程序,但尝试使用 ODBC 连接,而不是 OLEDB 连接,因此需要 ODBC 驱动程序而不是 OLEDB 提供程序,并尝试使用 accdb 文件,而 Jet仅支持 mdb 文件。

使用标准连接字符串。 ConnectionStrings.com 是一个受欢迎的资源,但文档也充满了它们。

示例(对于 accdb 文件,需要安装 Access 数据库引擎并与您的程序匹配位数)。

let connectionString = "Driver=Microsoft Access Driver (*.mdb, *.accdb);Dbq=" + filename + ";"

请注意,这些错误都存在于代码 sn-p 中。那个 sn-p 从来没有用过。

【讨论】:

以上是关于错误 [HY000] 一般错误:无效的文件 dsn ''的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值

SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005

Laravel 5.8 错误 SQLSTATE[HY000]: 一般错误: 1005 uuid

DBCException: SQL 错误 [50000] [HY000]: 一般错误

PDO 错误:SQLSTATE [HY000]:一般错误:2031

SQLSTATE [HY000]:一般错误:1364 字段“名称”没有默认值