2014-01-20 7 views
5

Ich versuche, eine Verbindung zu einer MS Access-Datenbank (.mdb) über OleDb herzustellen. Meine Frage istKeine Leseberechtigung für MSysObject-Fehler

SELECT * FROM ListQueries 

die mir den Fehler Fehler

SQL Execution abruft.

Ausgeführte SQL-Anweisung: SELECT * FROM ListQueries Fehlerquelle: Microsoft JET-Datenbankmodul Fehlermeldung: Datensätze können nicht gelesen werden; Keine Leseberechtigung für 'MSysObjects'.

Dann habe ich versucht this answer, aber es hat nicht geholfen. Dann sah ich eine andere Antwort, um das zu tun.

strDdl = "GRANT SELECT ON MSysObjects TO Admin;" 
CurrentProject.Connection.Execute strDdl 

Ich weiß nicht, wie das in meinem web project zu implementieren. Alternativ wurde so etwas wie dies gemäß diesem Vorschlag von @HansUp

schreiben, soll es von C# arbeiten, wenn Sie es von einer OleDb Verbindung zum Access db

der Code ausgeführt wird,

OleDbConnection con; 
using (con = new OleDbConnection(Connection.connectionString())) 
{ 
    con.Open(); 
    using (var com = new OleDbCommand("GRANT SELECT ON MSysObjects TO Admin", con)) 
    { 
     com.ExecuteNonQuery(); 
    } 
    using (var com = new OleDbCommand("Select * from ListQueries", con)) 
    { 
     using (var dr = com.ExecuteReader()) 
     { 
      while (dr.Read()) 
      { 
       qryList.Add(SQLReaderExtensions.SafeGetString(dr, "Name")); 
      } 
      dr.Close(); 
     } 
    } 
    con.Close(); 
} 

Die erste com.ExecuteNonQuery() gibt mir diesen Fehler.

Die Microsoft Jet-Engine-Arbeitsgruppe-Informationsdatei kann nicht geöffnet werden.

Ich würde wirklich gerne wissen, wie die Erlaubnis für einen OleDb Aufruf zu gewähren zu arbeiten. Alle Vorschläge werden wunderbare

P. S sein: Übrigens, ich bin mit MS Access 2010

+0

Ich empfehle, dass Sie MS Access-System-Objekte nicht. Es gibt andere und bessere Möglichkeiten, die Informationen zu erhalten. Was genau versuchst du zu tun? – Fionnuala

+0

@Remou: Abfragen in MS-Access sind analog zu Ansichten in SQL zum größten Teil, IMHO. – naveen

+0

Sie haben die Wahl zwischen ADO (http://msdn.microsoft.com/en-us/library/kcax58fh(VS.80).aspx) und DAO. Was würdest du bevorzugen? Beachten Sie, dass in ADO ein Unterschied zwischen Aktions- und Auswahlabfragen besteht. – Fionnuala

Antwort

8

empfehle ich, dass Sie nicht MS Access-Systemobjekte verwenden. Es gibt andere und bessere Möglichkeiten, die Informationen zu erhalten.

Sie haben die Wahl zwischen ADO und DAO. Was würdest du bevorzugen? Beachten Sie, dass in ADO ein Unterschied zwischen Aktion (adSchemaProcedures) und ausgewählten Abfragen (adSchemaViews) besteht.

Zum Beispiel

public static List<string> GetAllQueriesFromDataBase() 
{ 
    var queries = new List<string>(); 
    using (var con = new OleDbConnection(Connection.connectionString())) 
    { 
     con.Open(); 
     var dt = con.GetSchema("Views"); 
     queries = dt.AsEnumerable().Select(dr => dr.Field<string>("TABLE_NAME")).ToList(); 
    } 

    return queries; 
} 
+3

Ich habe gerade ein Beispiel hinzugefügt, wenn es Ihnen nichts ausmacht – naveen

+0

@naveen Sie sind die C# Person :) – Fionnuala

+0

nicht peinigen mich mehr :) – naveen

Verwandte Themen