在 C# 中使用 Access 数据库?
Posted
技术标签:
【中文标题】在 C# 中使用 Access 数据库?【英文标题】:Using Access databases in C#? 【发布时间】: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,只是我不确定,我想确保你们有尽可能多的信息;) 【参考方案1】:看到这个walkthrough for using ADO.NET to edit an Access database。
现在,虽然该示例使用的是 Web 应用程序,但不用担心,所使用的类仍然适用于控制台应用程序。
您需要使用的主要类是:
OleDbConnection OleDbCommand OleDbDataReader以上类的文档都有控制台应用示例的代码示例。
下面是用于控制台应用的代码 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有一些简单的例子here和here。
【讨论】:
以上是关于在 C# 中使用 Access 数据库?的主要内容,如果未能解决你的问题,请参考以下文章