如何从C#和SQL创建受用户名和密码保护的MS Access 2007文件?

我不太了解OleDB,我需要一些有关如何创建MS Access 2007文件作为密码保护的信息。 这是一段使用User Id=admin; Password=的代码User Id=admin; Password= User Id=admin; Password=但它在尝试保存说法时给出了错误: Cannot start your application. The workgroup information file is missing or opened exclusively by another user. Cannot start your application. The workgroup information file is missing or opened exclusively by another user.

编辑:现在我有错误: 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(); } 

我可以使用以下代码,但用户名怎么样?

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

EDITTED改变了我现在拥有的代码:

  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."); } 

希望有一些提示。 问候。

在独占模式下打开与DB的连接,如在VBA代码中使用数据库密码中所述 。

 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错误,请尝试将Jet OLEDB:System database添加到指向System.MDW文件的连接字符串(使用“搜索”找到它)。 它可能看起来像:

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

我认为您不能直接更改用户名。 考虑一下,SQL UPDATE类似于DELETEINSERT结合。 同样,结合CREATEDROP例如

而不是(pesudocode)

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

尝试(实际代码):

 CREATE USER onedaywhen pwd H3sJaZ9k2m; DROP USER HelpNeeder; 

然后授予新用户与旧用户相同的权限;)

ps我不认为可以参数化用户名和密码值。