2017-03-04 9 views
0

ich von C# zu meiner MS Access-Datenbank verbinden möchten und ich erhalte den folgenden Fehler:Datenbankverbindung mit C# Zugriff über

unrecognized database format 'data.accdb'

Was soll ich tun? Bitte helfen

+2

zeigen Sie uns einige Code: Wie sind Sie Verbindung, was ist Ihre Verbindungszeichenfolge ... – Nino

Antwort

0

Verwenden Verbindungszeichenfolge wie folgt aus:

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

Ich habe eine Klasse dafür. Es funktioniert perfekt mit dem neuesten Visual Studio, oder vs 2010 mit Access 2010. Wenn Sie eine neuere Version des Zugriffs haben, müssen Sie die Access Database Engine installieren. Es enthält auch eine Funktion, die das Apostrofe ausblendet und verhindert, dass Ihre SQL mit sql injection gehackt wird und eine Methode zum Erstellen von MD5-Hashes.

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 

} 

Stellen Sie keine Anweisungen in dem Destruktor der Klasse finalisieren (Wie Microsoft in der Dokumentation sagt, weil es einige Ausnahmen starten wird). Nur es nennen, wenn Sie Ihre Aufgaben abgeschlossen haben:

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

Ihre Databse Datei .accdb in Debug-Ordner des Projekts Kopieren Sie dann app.config-Datei in Ihrem Projekt

schreiben Code unten in app.config in der Konfiguration hinzufügen

Tag
<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) hinzufügen System.Configuration Referenz Verwenden Verbindungsobjekt als

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