Ligação à base de dados com o C# usando o access

quero ligar-me à minha base de dados de acesso do MS a partir de c# e estou a receber o seguinte erro:

Dados do formato da base de dados não reconhecido.accdb"

O que devo fazer? Por favor ajude

Author: Nino, 2017-03-04

3 answers

Usar um texto de ligação como este:

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();
    }
}
 0
Author: Sargis Ghazaryan, 2017-03-04 11:58:47
Fiz uma aula para isso. Ele funciona perfeitamente com o mais recente visual studio, ou vs 2010 com access 2010. Se tiver uma versão mais recente do access, terá de instalar o Access Database Engine . Ele também contém uma função que elimina a apostrofe impedindo que seu sql seja hackeado usando a injeção sql e um método para criar hashes 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

}

Não coloque instruções finais no destruidor da classe (como a Microsoft diz na documentação porque irá lançar algumas exceções). Basta chamá-lo quando você tiver terminado suas tarefas:

Database database = new Database("data.accdb");
DataSet result = database.selectData("SELECT something FROM table WHERE condition;");
database.finalize();
 0
Author: Cristian, 2017-03-04 10:16:01

Copie o seu ficheiro de dados .o accdb na pasta de depuração do projecto e depois adicionar uma aplicação.ficheiro de configuração no seu projecto

Escreva abaixo o código na aplicação.configuração na marca de configuração

<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)Adicionar Sistema.Referência Da Configuração Usar o objecto de ligação como se segue

OleDbConnection con = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["db"].ConnectionString);
 0
Author: Nitin Patil, 2017-03-04 12:01:38