繁体   English   中英

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

[英]How can I create user name and password protected MS Access 2007 file from C# and SQL?

我不太了解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;

然后GRANT新用户相同的权限老;)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM