【问题标题】:Using Access databases in C#?在 C# 中使用 Access 数据库?
【发布时间】:2012-04-23 01:56:56
【问题描述】:

如何在 C#(控制台应用程序,而不是 web asp.net)中使用 Microsoft Access (.accdb) 数据库?根据我的阅读,我需要使用ADO.NET,但我真的不知道如何在 C# 控制台应用程序中执行此操作。在带有MySQL 的PHP 中,我正在寻找mysqli_construct 任何人都可以为我指出一个可以帮助我的教程或文档吗?我正在尝试使用它来存储和访问我的非 Web、非 ASP.NET 应用程序的数据,如果这有任何改变的话。

谢谢!

【问题讨论】:

  • ADO.NET 就是 ADO.NET,不管它是否在 ASP.NET 内部。您仍然可以使用 Web 示例,只需忽略与 HTTP 请求和响应相关的任何内容。
  • 谢谢,@R0MANARMY,只是我不确定,我想确保你们有尽可能多的信息;)

标签: c# ms-access ado.net


【解决方案1】:

看到这个walkthrough for using ADO.NET to edit an Access database

现在,虽然该示例使用的是 Web 应用程序,但不用担心,所使用的类仍然适用于控制台应用程序。

您需要使用的主要类是:

以上类的文档都有控制台应用示例的代码示例。

下面是用于控制台应用的代码 sn-p(记得添加:using System.Data.OleDb;

string connectionString = 
    @"Provider=Microsoft.Jet.OLEDB.4.0;" +
    @"Data Source=C:\path\to\your\database.mdb;" +
    @"User Id=;Password=;";

string queryString = "SELECT Foo FROM Bar";

using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = new OleDbCommand(queryString, connection))
{
    try
    {
        connection.Open();
        OleDbDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            Console.WriteLine(reader[0].ToString());
        }
        reader.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

另外,刚刚注意到您明确提到了 .accdb 数据库。为此抓住Microsoft Access Database Engine 2010 Redistributable。然后需要将连接字符串中的提供程序更改为:Microsoft.ACE.OLEDB.12.0(有关更多信息,请参阅该链接中的注释)。

【讨论】:

    【解决方案2】:

    只需使用System.OleDb。这是我使用的一个小类

    首先,将数据库文件放在 App_Data 中

    web.config

    <connectionStrings>
        <add name="MyConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DatabaseName.accdb" providerName="System.Data.OleDb"/>
    </connectionStrings>
    

    App_Code/DataAccess.cs

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.OleDb;
    
    public class DataAccess
    {
    
    
        #region "Public Methods"
    
        public static DataTable GetTableFromQuery(string query, Dictionary<string, object> parameters, CommandType commandType)
        {
            DataTable dataTable = new DataTable();
            using (OleDbConnection conn = GetConnection()) {
                using (OleDbCommand cmd = new OleDbCommand(query, conn)) {
                    cmd.CommandType = commandType;
                    if (parameters != null) {
                        foreach (KeyValuePair<string, object> parameter in parameters) {
                            cmd.Parameters.AddWithValue(parameter.Key, parameter.Value);
                        }
                    }
                    using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd)) {
                        adapter.Fill(dataTable);
                    }
                }
            }
            return dataTable;
        }
    
        public static object GetSingleObjectFromQuery(string query, Dictionary<string, object> parameters, CommandType commandType)
        {
            object value = null;
            using (OleDbConnection conn = GetConnection()) {
                using (OleDbCommand cmd = new OleDbCommand(query, conn)) {
                    cmd.CommandType = commandType;
                    if (parameters != null) {
                        foreach (KeyValuePair<string, object> parameter in parameters) {
                            cmd.Parameters.AddWithValue(parameter.Key, parameter.Value);
                        }
                    }
                    conn.Open();
                    using (OleDbDataReader reader = cmd.ExecuteReader()) {
                        while (reader.Read()) {
                            value = reader.GetValue(0);
                        }
                    }
                }
            }
            return value;
        }
    
        public static int ExecuteNonQuery(string query, Dictionary<string, object> parameters, CommandType commandType)
        {
            int value = 1;
            using (OleDbConnection conn = GetConnection()) {
                using (OleDbCommand cmd = new OleDbCommand(query, conn)) {
                    cmd.CommandType = commandType;
                    if (parameters != null) {
                        foreach (KeyValuePair<string, object> parameter in parameters) {
                            cmd.Parameters.AddWithValue(parameter.Key, parameter.Value);
                        }
                    }
                    cmd.Connection.Open();
                    value = cmd.ExecuteNonQuery();
                }
            }
            return value;
        }
    
        #endregion
    
        #region "Private Methods"
    
        private static OleDbConnection GetConnection()
        {
            string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString;
            return new OleDbConnection(ConnectionString);
        }
    
        #endregion
    
    }
    


    现在从页面调用它
    var myTable = DataAccess.GetTableFromQuery("SELECT * FROM TableName", null, CommandType.Text);
    

    【讨论】:

    • 仅供参考,您不需要在第一个 using 语句中使用大括号。
    【解决方案3】:

    看看OLEDB Namespace有一些简单的例子herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多