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