5

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

谢谢!

4

3 回答 3

10

请参阅此演练,了解使用 ADO.NET 编辑 Access 数据库

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

您需要使用的主要类是:

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

下面是在控制台应用程序中使用的代码片段(记得添加: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有关更多信息,请参阅该链接中的注释)。

于 2012-04-23T02:02:56.177 回答
3

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

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

网络配置

<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);
于 2012-04-23T02:12:22.520 回答
1

看看OLEDB 命名空间,这里这里有一些简单的例子。

于 2012-04-23T02:02:47.050 回答