2011-11-25 1 views
1

나는 OleDB에 대해 많이 모른다. 암호로 보호 된 MS Access 2007 파일을 만드는 방법에 대한 정보가 필요하다. 이 User Id=admin; Password=를 사용하는 코드 조각이지만 나에게 말을 저장하는 동안 오류를 제공합니다 :C# 및 SQL에서 사용자 이름과 암호로 보호 된 MS Access 2007 파일을 만들려면 어떻게해야합니까?

편집 : 지금은이 오류 : Cannot open the MS Office Access database engine workgroup information file

나는 문제가 SQL 명령에 누워 있음을 알아 낸 . 어떤 SQL 명령을 사용해야합니까? 이 명령은 문제를 일으키고 그 이유를 알 수 없습니다. 주석에서 제공 한 링크와 비슷한 구문을 사용했습니다.

try 
    { 
     objOleDbConnection.Open(); 
     objOleDbCommand.CommandText = 
      "ALTER USER " + storedAuth.UserName + 
      " PASSWORD [" + storedAuth.Password + "] []"; 
     objOleDbCommand.ExecuteNonQuery(); 
    } 

다음 코드를 사용할 수 있지만 사용자 이름은 어떻게됩니까? 몇 가지 팁

private void sfdNewFile_FileOk(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     // Creating a ADOX object needed to create 
     // new MS Access file. 
     ADOX.Catalog createMSFile = new ADOX.Catalog(); 

     createMSFile.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
      sfdNewFile.FileName); 

     Table nTable = new Table(); 
     nTable.Name = "PersonData"; 
     nTable.Columns.Append("DataID", DataTypeEnum.adInteger, 40); 
     nTable.Columns.Append("Type", DataTypeEnum.adVarWChar, 40); 
     nTable.Columns.Append("URL", DataTypeEnum.adVarWChar, 40); 
     nTable.Columns.Append("SoftwareName", DataTypeEnum.adVarWChar, 40); 
     nTable.Columns.Append("SerialCode", DataTypeEnum.adVarWChar, 40); 
     nTable.Columns.Append("UserName", DataTypeEnum.adVarWChar, 40); 
     nTable.Columns.Append("Password", DataTypeEnum.adVarWChar, 40); 

     createMSFile.Tables.Append(nTable); 

     // It is importnat to release COM object, in this very order 
     // otherwise we eill end up with an error. 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(nTable); 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(createMSFile.Tables); 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(createMSFile.ActiveConnection); 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(createMSFile); 

     OleDbConnection objOleDbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + 
       "Data Source=" + sfdNewFile.FileName); 
     OleDbCommand objOleDbCommand = objOleDbConnection.CreateCommand(); 

     try 
     { 
      objOleDbConnection.Open(); 
      objOleDbCommand.CommandText = "ALTER DATABASE PASSWORD [" + storedAuth.Password + "] []"; 
      objOleDbCommand.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      // Displaying any errors that 
      // might have occured. 
      MessageBox.Show("Error opening the " + 
      "connection: " + ex.Message); 
     } 
     finally 
     { 
      objOleDbConnection.Close(); 
     } 

     MessageBox.Show("File have been created."); 
    } 

희망 :

objOleDbCommand.CommandText = "ALTER DATABASE PASSWORD " + storedAuth.Password + "[]"; 

은 편집 해 내가 지금 무슨 코드를 변경했습니다. 문안 인사.

+0

이 참조 http://msdn.microsoft.com/en-us/library/bb177884(v=office.12).aspx –

답변

3

Working with Database Passwords in VBA Code에 설명 된 exclusive mode의 DB 연결을 엽니 다.

OleDbConnection objOleDbConnection = new OleDbConnection(
    "Provider=Microsoft.ACE.OLEDB.12.0;" + 
    "Data Source=" + sfdNewFile.FileName + ";Exclusive=1;"); 

이도 잘 작동합니다 :

OleDbConnection objOleDbConnection = new OleDbConnection(
    "Provider=Microsoft.ACE.OLEDB.12.0;" + 
    "Data Source=" + sfdNewFile.FileName + ";Mode=12;"); 

편집 :

은 위의 "Cannot change password on a shared open database."에 대한입니다.

여전히 Cannot open the MS Office Access database engine workgroup information file 오류가있는 경우 System.MDW 파일을 가리키는 연결 문자열에 Jet OLEDB:System database을 추가하십시오 ("검색"을 사용하여 찾으십시오). 다음과 같이 보일 수 있습니다.

OleDbConnection objOleDbConnection = new OleDbConnection(
    "Provider=Microsoft.ACE.OLEDB.12.0" + 
    ";Data Source=" + sfdNewFile.FileName + 
    ";Jet OLEDB:System database=C:\...\System.MDW" 
    ";Exclusive=1;"); 
1

사용자 이름을 직접 변경할 수 있다고 생각하지 않습니다. SQL UPDATEINSERT과 결합 된 DELETE과 유사합니다. 마찬가지로 CREATEDROP을 결합하십시오. 대신 (pesudocode)

ALTER USER HelpNeeder SET uid = onedaywhen; -- no such syntax 

시도 (실제 코드)의

:

CREATE USER onedaywhen pwd H3sJaZ9k2m; 
DROP USER HelpNeeder; 

그런 GRANT 새 사용자 이전과 동일한 권한)

추신 사용자 이름과 암호 값을 매개 변수화 할 수 있다고는 생각하지 않습니다.

관련 문제