2016-07-16 7 views
0

Eine einfache "Auswahl * von Tabellenname" SQL-Abfrage funktioniert für eine Tabelle namens "Modus", aber nicht für eine Tabelle mit dem Namen "Benutzer". Warum?C# - Access-Datenbank: Warum SELECT * FROM Tabelle funktioniert nicht?

Beide Tabellen haben 2 Spalten. Wenn ich das Programm mit der Variable "mySQL" als "SELECT * FROM-Modus" ausführe, funktioniert es gut. Wenn ich stattdessen die Benutzertabelle lege, was bedeutet, dass die MySQL-Anweisung "SELECT * FROM user" gewesen wäre, wird eine Ausnahme ausgelöst, die "Syntax error in FROM clause" lautet. Wie kann das sein? Hier

ist der Code:

static void Main(string[] args) 
    { 
     String connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Accounts.mdb"; 
     OleDbConnection conn; 
     conn = new OleDbConnection(connectionstring); 
     try 
     { 
      conn.Open(); 
     } 
     catch (Exception) 
     { 
      Console.Write("Could not connect to database"); 
     } 
     String mySQL = "SELECT * FROM user"; 
     OleDbCommand cmd = new OleDbCommand(mySQL, conn); 

     OleDbDataReader rdr = cmd.ExecuteReader(); 

     while (rdr.Read()) 
     { 
      Console.Write(String.Format("{0}\n,{1}\n", rdr.GetValue(0).ToString(), rdr.GetValue(1).ToString())); 
     } 
     Console.Read(); 
    } 
+0

Jede Ausnahme auf der Konsole? – SMA

Antwort

3

Da USER a reserved word in MS-Access

Ändern Sie abfragen es zwischen Platz brakets einzukapseln

SELECT * FROM [User] 

wenn auch ich Ihnen vorschlagen, den Namen zu ändern, die Tabelle

+0

Ich werde! Vielen Dank! – Skemelio

+0

Nicht vergessen conn.Close(). All dein Code muss in try sein, und in finally close Dispose dein conn, rdr und cmd wenn nicht null;) – Esperento57

1

Tun Sie wie Steve sagte. Und ein Vorschlag für Ihren Code:

 String connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Accounts.mdb"; 
     OleDbConnection conn = null; 
     OleDbCommand cmd = null; 
     OleDbDataReader rdr = null; 
     String mySQL = "SELECT * FROM [user]"; 

     try 
     { 
      conn = new OleDbConnection(connectionstring); 
      conn.Open(); 


      cmd = new OleDbCommand(mySQL, conn); 
      rdr = cmd.ExecuteReader(); 

      while (rdr.Read()) 
      { 
       Console.Write(String.Format("{0}\n,{1}\n", rdr.GetValue(0).ToString(), rdr.GetValue(1).ToString())); 
      } 
      Console.Read(); 

      conn.Close(); 
     } 
     catch (Exception ex) 
     { 
      Console.Error.Write("Error founded: " + ex.Message); 
     } 
     finally 
     { 
      if (conn != null) conn.Dispose(); 
      if (cmd != null) cmd.Dispose(); 
      if (rdr != null) rdr.Dispose(); 
     } 
+0

In der Tat, aber einige Verwendung von Anweisungen wird hier nützlich sein – Steve

Verwandte Themen