【问题标题】:How to connect to a MS Access file (mdb) using C#?如何使用 C# 连接到 MS Access 文件 (mdb)?
【发布时间】:2012-05-09 15:05:29
【问题描述】:

我正在尝试连接到一个 mdb 文件,并且我知道我需要 Microsoft.OLEDB.JET.4.0 数据提供程序。不幸的是,我没有在(大学)机器上安装它。 由于他们不提供该提供商,我相信应该有办法解决。

如何在没有Microsoft.OLEDB.JET.4.0 的情况下连接到文件,或者有其他选择吗?

我有以下提供者:

我尝试使用OLE DB Provider for Microsoft Directory Services,在测试连接时,我得到“测试成功,但提供者不接受某些设置”。我拿了那个字符串并使用它,我得到了ADsDSOObject' failed with no error message available, result code: DB_E_ERRORSINCOMMAND(0x80040E14)

【问题讨论】:

    标签: c# ms-access oledb


    【解决方案1】:

    最简单的连接方式是通过 OdbcConnection 使用类似这样的代码

    using System.Data.Odbc;
    
    using(OdbcConnection myConnection = new OdbcConnection())
    {
        myConnection.ConnectionString = myConnectionString;
        myConnection.Open();
    
        //execute queries, etc
    
    }
    

    myConnectionString 是这样的

    myConnectionString = @"Driver={Microsoft Access Driver (*.mdb)};" + 
    "Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;
    

    ConnectionStrings

    您也可以创建一个 DSN,然后在连接字符串中使用该 DSN

    • 打开控制面板 - 管理工具 - ODBC 数据源 经理
    • 转到系统 DSN 页面并添加新的 DSN
    • 选择 Microsoft Access 驱动程序 (*.mdb) 并按 END
    • 设置 DSN 的名称(本例选择 MyDSN)
    • 选择要使用的数据库
    • 尝试使用 Compact 或 Recover 命令查看连接是否正常

    现在你的 connectionString 可以这样写

    myConnectionString = "DSN=myDSN;"
    

    【讨论】:

    • 感谢OdbcConnection 做到了。
    • 当MDW在图片中时,你可以需要不同的连接字符串。见here
    • 非常好的答案,您也可以查看其他 question 以了解如何将 Microsoft Access 与 Entity Framewor 一起使用。
    【解决方案2】:

    以下是使用 Jet OLEDB 或 Ace OLEDB Access DB 的方法:

    using System.Data;
    using System.Data.OleDb;
    
    string myConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
                               "Data Source=C:\myPath\myFile.mdb;" +                                    
                               "Persist Security Info=True;" +
                               "Jet OLEDB:Database Password=myPassword;";
    try
    {
        // Open OleDb Connection
        OleDbConnection myConnection = new OleDbConnection();
        myConnection.ConnectionString = myConnectionString;
        myConnection.Open();
    
        // Execute Queries
        OleDbCommand cmd = myConnection.CreateCommand();
        cmd.CommandText = "SELECT * FROM `myTable`";
        OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // close conn after complete
    
        // Load the result into a DataTable
        DataTable myDataTable = new DataTable();
        myDataTable.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine("OLEDB Connection FAILED: " + ex.Message);
    }
    

    【讨论】:

    • 优秀的解决方案。非常有帮助,为我工作!
    【解决方案3】:

    您应该使用“Microsoft OLE DB Provider for ODBC Drivers”来访问 Microsoft Access。这是使用它的示例教程

    http://msdn.microsoft.com/en-us/library/aa288452(v=vs.71).aspx

    【讨论】:

    • 这给了我:Test Connection failed because of an error in initializing provider. Data source name not found and no default driver specified.。你认为这个提供者不存在吗?
    • 请参阅此链接以获取可用的连接字符串connectionstrings.com/access-2007
    【解决方案4】:

    您使用的是什么 Access 文件扩展名? Jet OLEDB 或 Ace OLEDB。 如果您的 Access DB 是 .mdb(又名 Jet Oledb)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Oledb
    
    namespace MembershipInformationSystem.Helpers
    {
        public class dbs
        {
            private String connectionString;
            private String OleDBProvider = "Microsoft.JET.OLEDB.4.0"; \\if ACE Microsoft.ACE.OLEDB.12.0
            private String OleDBDataSource = "C:\\yourdb.mdb";
            private String OleDBPassword = "infosys";
            private String PersistSecurityInfo = "False";
    
            public dbs()
            {
    
            }
    
            public dbs(String connectionString)
            {
                this.connectionString = connectionString;
            }
    
            public String konek()
            {
                connectionString = "Provider=" + OleDBProvider + ";Data Source=" + OleDBDataSource + ";JET OLEDB:Database Password=" + OleDBPassword + ";Persist Security Info=" + PersistSecurityInfo + "";
                return connectionString;
            }
        }
    }
    

    【讨论】:

    【解决方案5】:

    试试这个..

    using System.Data.OleDb;
    
    OleDbConnection dbConn;
    
    dConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Registration.accdb;");
    

    【讨论】:

    • 如果您使用的是 MS Access 2010
    【解决方案6】:

    另一种最简单的连接方式是通过 OdbcConnection 使用像这样的 App.config 文件

      <appSettings>  
        <add key="Conn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|MyDB.mdb;Persist Security Info=True"/>
      </appSettings>
    

    MyDB.mdb 是我的数据库文件,它与主 exe 文件一起存在于当前主应用程序文件夹中。

    如果你的 mdf 文件有密码,那么就这样使用

      <appSettings>
        <add key="Conn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|MyDB.mdb;Persist Security Info=True;Jet OLEDB:Database Password=Admin$@123"/>
      </appSettings>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多