76290
お世話になります。

C#(.NetFramework4.5)で既存のAccessファイルに接続しようと、公式からaccessdatabaseengine.exeを  
ダウンロードしてインストールしたのですが、実行時に登録されていないとエラーが出ます。

[![画像の説明をここに入力](https://i.stack.imgur.com/dNUB1.jpg)](https://i.stack.imgur.com/dNUB1.jpg)

[![画像の説明をここに入力](https://i.stack.imgur.com/vvo0i.jpg)](https://i.stack.imgur.com/vvo0i.jpg)  
バージョンも、2016版の32bit(x64のついていない方)は確認したので、合っていると思うのですが、  
原因がわかりません。

原因と対策をお教えいただけますでしょうか。

下記がコードになります。

```

        //SQL作成
        DataTable resultDt = new DataTable();
        StringBuilder sql = new StringBuilder();
        sql.AppendLine("SELECT");
        sql.AppendLine("  *");
        sql.AppendLine("FROM M_社員");
    
        //Access接続準備
        OleDbCommand command = new OleDbCommand();
        OleDbDataAdapter da = new OleDbDataAdapter();
        OleDbConnection cnAccess = new OleDbConnection();
        cnAccess.ConnectionString = Properties.Settings.Default.AccessCon;
    
        //Access接続開始
        cnAccess.Open();
    
        try
        {
            command.Connection = cnAccess;
            command.CommandText = sql.ToString();
            da.SelectCommand = command;
    
            //SQL実行 結果をデータテーブルに格納
            da.Fill(resultDt);
        }
        catch
        {
            throw;
        }
        finally
        {
            command.Dispose();
            da.Dispose();
            cnAccess.Close();
        }
    
        //結果出力
        for (int rowindex = 0; rowindex < resultDt.Rows.Count; rowindex++)
        {
            for (int colindex = 0; colindex < resultDt.Columns.Count; colindex++)
            {
                Console.Write(resultDt.Rows[rowindex][colindex] + " ");
            }
            Console.WriteLine();
        }
    
```

参考にさせていただいたのは、こちらのサイト様です。

<https://hironimo.com/prog/c-sharp/c-accessdb/>

よろしくお願いいたします。
CC BY-SA 4.0
2021-05-27T05:37:24.423
76103
2021-06-03T03:22:20.063
9374
question
c# ms-access
C#でAccessにつなげるためのACE.oledbをインストールしても、実行時に登録されていないと出る。
スクリーンショットのAccessConのMicrosoft.ACE.OLEDB.16.0って文字列はどこから持ってきたんでしょう？ダウンロードページの説明にあるプロバイダー引数と明らかに違うようですけど。

[Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント](https://www.microsoft.com/ja-
JP/download/details.aspx?id=54920)

多分接続文字列が間違ってるか何かだと思いますが、VisualStudioから"ツール">"データベースへ接続"で接続してみて接続文字列を確認してみてはどうでしょう？
CC BY-SA 4.0
2021-05-27T07:55:41.520
76109
2021-05-27T07:55:41.520
41943
76103
answer
コメントに書いたのですが反応がないので回答欄に画像入りで書いておきます。

Visual Studio から ACE 経由で Access に接続できますか？ Visual Studio のウィザードは働きますか？ それが Yes
なら ACE は 32-bit 版なので（32/64-bit 版は同じ PC 内に共存できません）、アプリが x86 であれば動くと思うのですが。

例えば、Visual Studio の「接続の追加」で Access
を選び［詳細設定(V)...］をクリックして「詳細設定」の「Provider」をみて、以下の画像のように ACE が選択できればその PC には
32-bit 版 ACE がインストールされているはずです（Visual Studio は 32-bit なので 64-bit 版 ACE は使えません）

[![画像の説明をここに入力](https://i.stack.imgur.com/62LVh.jpg)](https://i.stack.imgur.com/62LVh.jpg)

その先に進めていくと接続文字列も生成されるはずです。それを使って、アプリは x86 でコンパイルすればアプリからも問題なく Access
に接続できるはずです。
CC BY-SA 4.0
2021-06-03T03:22:20.063
76290
2021-06-03T03:22:20.063
43387
76103
answer