在C#中使用Access数据库?

时间:2012-04-23 01:56:57

标签: c# ms-access ado.net

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

谢谢!

3 个答案:

答案 0 :(得分:9)

请参阅此walkthrough for using ADO.NET to edit an Access database

现在虽然该示例使用的是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(有关详细信息,请参阅该链接中的说明)。

答案 1 :(得分:3)

只需使用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);

答案 2 :(得分:1)

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