【发布时间】:2013-01-28 17:02:50
【问题描述】:
我想使用 Odbc 从 c# 连接到 Access MDB 文件。
当我尝试执行时
OdbcConnection con = new OdbcConnection(
"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\temp\\test.mdb;");
我得到以下异常:
exc {System.Data.Odbc.OdbcException (0x80131937): ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
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& connection)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.Odbc.OdbcConnection.Open()
:
这里有什么问题?它抱怨“找不到数据源名称并且没有指定默认驱动程序”,但我指定了一个驱动程序?
我在http://www.connectionstrings.com/access#net-framework-data-provider-for-odbc 的帮助下得到了连接字符串
【问题讨论】:
-
你能把
c:\\temp\\test.mdb的路径替换成c:\temp\test.mdb吗?然后再试一次。 -
@Hiten004:在 C# 中,要么使用逐字字符串并使用简单的反斜杠,要么使用普通字符串并使用双反斜杠:
@"c:\temp\test.mdb"或"c:\\temp\\test.mdb"。 -
它可能是它无法识别的提供程序字符串 - 这可能有点不确定。在这里检查:connectionstrings.com/access-2007 看起来您必须使用
Driver=,不确定这是否与Provider=相同,但该站点似乎对 ODBC 进行了区分-也许您只是缺少驱动程序名称中的扩展名 -
Jet ODBC 提供程序只能由 32 位应用程序访问。如果您的 c# 项目的编译目标是 64 位(任何 cpu),请将其更改为 x86。
-
HansUp 是正确的,我刚刚发现自己并将其作为答案发布。 @Charleh:您将 Driver= 用于 Odbc,将 Provider= 用于 OldDB。它们的连接字符串不同,您不能将一个用于另一个。
标签: c# .net ms-access odbc connection-string