2014-01-20 3 views
5

OleDb을 통해 MS Access 데이터베이스 (.mdb)에 연결하려고합니다. 내 질문은 나에게 오류MSysObject 오류에 대한 읽기 권한이 없습니다.

SQL 실행 오류를 가져

SELECT * FROM ListQueries 

입니다.

실행 된 SQL 문 : SELECT * FROM ListQueries 오류 원본 : Microsoft JET 데이터베이스 엔진 오류 메시지 : 레코드를 읽을 수 없습니다. 'MSysObjects'에 대한 읽기 권한이 없습니다.

그렇다면 this answer을 시도했지만 도움이되지 않았습니다. 그 다음 나는 또 다른 대답이 이것을하는 것을 보았다.

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

구현 방법을 모르겠다. web project. 당신이

코드는 DB 액세스에은 OleDb 연결에서 실행하는 경우 또는 @HansUp

하여이 제안에 따라이 같은 것을 작성되었으며, 그것은, C#을에서 작동합니다

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(); 
} 

첫 번째 com.ExecuteNonQuery()은 나에게이 오류를 제공합니다.

Microsoft Jet 엔진 작업 그룹 정보 파일을 열 수 없습니다.

나는에 대한 OleDb 호출 권한을 부여하는 방법을 알고 싶습니다. . 어떤 제안 멋진

P.S 될 것입니다 : BTW, 내가 강력하게 당신이 MS 액세스 시스템 개체를 사용하지 않는 것이 좋습니다 MS 액세스 2010

+0

난 강력하게 당신이 MS 액세스 시스템 개체를 사용하지 않는 것이 좋습니다. 정보를 얻는 다른 좋은 방법이 있습니다. 너 정확히 뭘 하려구? – Fionnuala

+0

@Remou : MS-Access의 쿼리는 SQL의 Views와 비슷합니다. 대부분 IMHO입니다. – naveen

+0

ADO (http://msdn.microsoft.com/en-us/library/kcax58fh(VS.80).aspx)와 DAO 중에서 선택할 수 있습니다. 어느 걸 더 선호하십니까? ADO에는 작업 쿼리와 선택 쿼리간에 차이점이 있습니다. – Fionnuala

답변

8

을 사용하고 있습니다. 정보를 얻는 다른 좋은 방법이 있습니다.

ADO과 DAO 중에서 선택할 수 있습니다. 어느 걸 더 선호하십니까? ADO에서는 작업 (adSchemaProcedures)과 선택 쿼리 (adSchemaViews) 사이에 차이점이 있습니다. 예를 들어

,

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

방금 ​​마음을 모르면 예제를 추가했습니다. – naveen

+0

@naveen 당신은 C# 사람입니다 :) – Fionnuala

+0

나 embarass 날 더 :) – naveen

관련 문제