使用access与c#连接数据库

Database connection with c# using access

我想从 C# 连接到我的 MS Access 数据库,但出现以下错误:

unrecognized database format 'data.accdb'

我该怎么办?请帮忙

像这样使用连接字符串:

public static string ConStr = "Provider=Microsoft.ACE.Oledb.15.0; Data Source=D:\db.accdb;";


public static void DeleteTable(string TableName)
{
    OleDbConnection connection = new OleDbConnection(OLEDB.ConStr);
    OleDbCommand oleDbCommand = new OleDbCommand(string.Format("delete from [{0}]", (object) TableName), connection);
    try
    {
       connection.Open();
       oleDbCommand.ExecuteNonQuery();
    }
    catch
    {
    }
    finally
    {
        connection.Close();
    }
}

我为此做了一个 class。它与最新的 visual studio 或 vs 2010 与 access 2010 完美配合。如果您有较新版本的 access,则需要安装 Access Database Engine。它还包含一个去除撇号的功能,防止您的 sql 使用 sql 注入和创建 md5 哈希的方法被黑客攻击。

using System.Data;
using System.Data.OleDb;
using System.Text;
using System.Security.Cryptography;

public class Database
{

    #region Variables

    String Name;
    String Path;
    String ConnectionString;
    OleDbConnection Connection;

    #endregion

    #region Init Destroy

    public Database(String Name)
    {
        this.Name = @"App_Data\" + Name;
        Path = HttpContext.Current.Server.MapPath(this.Name);
        ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; " +
                            "Data Source = " + Path + ";" +
                            "Persist Security Info = False;";
        Connection = new OleDbConnection(ConnectionString);
        if (Connection.State == System.Data.ConnectionState.Closed)
        {
            Connection.Open();
        }
    }

    public void finalize()
    {
        if (Connection.State == System.Data.ConnectionState.Open)
        {
            try { Connection.Close(); }
            catch { }
        }
    }

    #endregion

    #region Queries

    public void execute(String query)
    {
        OleDbCommand command = new OleDbCommand(query, Connection);
        command.ExecuteNonQuery();
    }

    public OleDbDataReader select(String query)
    {
        OleDbCommand command = new OleDbCommand(query, Connection);
        OleDbDataReader data = command.ExecuteReader();
        return data;
    }

    public DataSet selectData(String query)
    {
        OleDbCommand command = new OleDbCommand(query, Connection);
        OleDbDataAdapter adp = new OleDbDataAdapter(command);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        return ds;
    }

    public object scalar(String query)
    {
        OleDbCommand command = new OleDbCommand(query, Connection);
        object data = new object();
        data = command.ExecuteScalar();
        return data;
    }

    #endregion

    #region Encryption Security

    public String stripInjection(String field)
    {
        String x = field.Replace(@"'", string.Empty);
        x = x.Replace(@"""", string.Empty);
        return x;
    }

    public string md5Hash(string input)
    {
        StringBuilder hash = new StringBuilder();
        MD5CryptoServiceProvider md5provider = new MD5CryptoServiceProvider();
        byte[] bytes = md5provider.ComputeHash(new UTF8Encoding().GetBytes(input));

        for (int i = 0; i < bytes.Length; i++)
        {
            hash.Append(bytes[i].ToString("x2"));
        }
        return hash.ToString().ToUpper();
    }

    #endregion

}

不要将 finalize 指令放在 class 的析构函数中(正如 Microsoft 在文档中所说,因为它会启动一些异常)。完成任务后调用即可:

Database database = new Database("data.accdb");
DataSet result = database.selectData("SELECT something FROM table WHERE condition;");
database.finalize();

将您的数据库文件 .accdb 复制到项目的 Debug 文件夹中,然后将 app.config 文件添加到您的项目中

在配置标签

的app.config中写入以下代码
<connectionStrings>
    <add name="db" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\sse_db.accdb;Persist Security Info=False;"
      providerName="System.Data.Oledb" />
</connectionStrings>

1)添加System.Configuration参考 使用连接对象如下

OleDbConnection con = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["db"].ConnectionString);