Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#和SQL创建用户名和密码保护的MS Access 2007文件?_C#_Sql_Ms Access_Ado - Fatal编程技术网

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

如何从C#和SQL创建用户名和密码保护的MS Access 2007文件?,c#,sql,ms-access,ado,C#,Sql,Ms Access,Ado,我对OleDB了解不多,我需要一些关于如何创建受密码保护的MS Access 2007文件的信息。这是一段使用User Id=admin的代码;Password=但它在尝试保存时给我一个错误,说:无法启动应用程序。工作组信息文件丢失或由其他用户独占打开。 编辑: 现在出现错误:无法打开MS Office Access数据库引擎工作组信息文件 我发现问题在于SQL命令。我应该使用什么SQL命令?这个命令产生了一个问题,我不知道为什么。我已经使用了类似的语法从该人在评论中提供的链接 try

我对OleDB了解不多,我需要一些关于如何创建受密码保护的MS Access 2007文件的信息。这是一段使用
User Id=admin的代码;Password=
但它在尝试保存时给我一个错误,说:
无法启动应用程序。工作组信息文件丢失或由其他用户独占打开。

编辑: 现在出现错误:
无法打开MS Office Access数据库引擎工作组信息文件

我发现问题在于SQL命令。我应该使用什么SQL命令?这个命令产生了一个问题,我不知道为什么。我已经使用了类似的语法从该人在评论中提供的链接

    try
    {
        objOleDbConnection.Open();
        objOleDbCommand.CommandText = 
            "ALTER USER " + storedAuth.UserName + 
            " PASSWORD [" + storedAuth.Password + "] []";
        objOleDbCommand.ExecuteNonQuery();
    }
我可以使用下面的代码,但是用户名呢

objOleDbCommand.CommandText = "ALTER DATABASE PASSWORD " + storedAuth.Password + "[]";
Edited更改了我现在拥有的代码:

    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的连接,如中所述

这也应该很好:

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

上述内容适用于“
无法更改共享开放数据库上的密码。

如果仍然存在
无法打开MS Office Access数据库引擎工作组信息文件的错误,请尝试添加到指向
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;");
打开与中的DB的连接,如中所述

这也应该很好:

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

上述内容适用于“
无法更改共享开放数据库上的密码。

如果仍然存在
无法打开MS Office Access数据库引擎工作组信息文件的错误,请尝试添加到指向
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 <代码>更新<代码>类似于<代码>删除>代码>结合<代码>插入< /代码>。同样,组合
创建
删除

而不是(伪代码)

try(实际代码):

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


p、 我认为用户名和密码值不能参数化。

我认为您不能直接更改用户名。考虑到一个SQL <代码>更新<代码>类似于<代码>删除>代码>结合<代码>插入< /代码>。同样,组合
创建
删除

而不是(伪代码)

try(实际代码):

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

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

看到这个了吗
CREATE USER onedaywhen pwd H3sJaZ9k2m;
DROP USER HelpNeeder;