C#とSQLからユーザー名とパスワードで保護されたMS Access 2007ファイルを作成するにはどうすればよいですか?

私はOleDBについてよく知らないので、パスワードで保護されたMS Access 2007ファイルを作成する方法に関する情報が必要です。これは User Id = admin;を使用するコードです。パスワード= が、保存しようとするとエラーが表示されます。アプリケーションを起動できません。ワークグループ情報ファイルが存在しないか、別のユーザーによって排他的に開かれています。

EDIT: Now I have error: 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.");
    }

いくつかのヒントを期待しています。よろしく。

1

2 答え

排他モードの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;");

編集:

上記は "共有されている開いているデータベースのパスワードを変更できません"です。

MS Office Accessデータベースエンジンワークグループ情報ファイルを開くことができませんエラーが発生した場合は、 System.MDW ファイルを指す接続文字列に Jet OLEDB:System database を追加します( "search"を使用して検索してください)。それは次のようになります:

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

私はあなたが直接ユーザー名を変更できるとは思わない。 UPDATE は、 INSERT と組み合わせた DELETE に似ています。同様に、 CREATE DROP を組み合わせてください。

代わりに(ペドコードコード)

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

try(実際のコード):

CREATE USER onedaywhen pwd H3sJaZ9k2m;
DROP USER HelpNeeder;

次に、新しいユーザに古いものと同じ権限を与える GRANT

p.s.私は、ユーザー名とパスワードの値をパラメータ化できるとは思わない。

1
追加された