1

データを Access データベースにエクスポートする必要があります。私のコードは機能しますが、クライアント コンピューターに有効なプロバイダーとして Microsoft.Jet.OLEDB.4.0 があるという前提で機能します。

これが正しいかどうかをコードでテストしたいと思います。私の問題は、既存のアクセス データベースの場所がなく、接続を確認してから削除するために使用する新しい .mdb を作成したくないことです。

どのプロバイダーがインストールされているかを確認する方法はありますか?

4

5 に答える 5

3

の存在を簡単に確認できます。

HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}

これは、Microsoft.Jet.OLEDB.4.0 の CLSID です。

于 2009-04-09T18:25:27.860 に答える
2

マシンで MDAC のバージョンを検出し、そのプロバイダがサポートされているかどうかを推定することはできますか?

http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=47262&lngWId=1

ここにあなたが見ることができるスニペットがあります。

于 2009-04-09T18:21:30.070 に答える
1

各主要プロバイダーには、レジストリ エディターの下に記載されているクラス ID があります。

これは、Microsoft.Jet.OLEDB.4.0 の CLSID です。

プログラムで確認するには、フレームワーク 2.0 で確認された以下の C# コードを使用します。

using System.Data.OleDb;
OleDbEnumerator enumerator = new OleDbEnumerator();
        DataTable table = enumerator.GetElements();
        bool bNameFound = false;
        bool bCLSIDFound = false;

        foreach (DataRow row in table.Rows)
        {
            foreach (DataColumn col in table.Columns)
            {
                if ((col.ColumnName.Contains("SOURCES_CLSID")) && (row[col].ToString().Contains("{dee35070-506b-11cf-b1aa-00aa00b8de95}")))
                    Console.WriteLine("CLSID of Microsoft.Jet.OLEDB.4.0. Found");

                if ((col.ColumnName.Contains("SOURCES_NAME")) && (row[col].ToString().Contains("Microsoft.ACE.OLEDB.12.0")))
                {
                    bNameFound = true;
                    if ((col.ColumnName.Contains("SOURCES_CLSID")) && (row[col].ToString().Contains("{3BE786A0-0366-4F5C-9434-25CF162E475E}")))
                        bCLSIDFound = true;
                }
            }
        }

        if (!bNameFound && !bCLSIDFound)
            Console.WriteLine("Microsoft.ACE.OLEDB.12.0 Not found");
        else
            Console.WriteLine("Microsoft.ACE.OLEDB.12.0 found");

「正しく修正し、テストのバグに噛まれないようにする」ことを忘れないでください

于 2015-06-25T13:41:55.770 に答える
0

.NET Framework がインストールされている (VB.NET コードを実行する必要がある) 場合、マシンにはあなたが言及したプロバイダーがあると思います。 MSDN

于 2009-04-09T18:22:45.903 に答える
0
       Dim reader As Object = OleDbEnumerator.GetRootEnumerator()
        Dim Oleprovide As String = ""

        While reader.Read
            For i = 0 To reader.FieldCount - 1
                If reader.GetName(i) = "SOURCES_NAME" Then
                    If reader.GetValue(i).ToString.Contains(".OLEDB.") = True Then
                        Oleprovide = reader.GetValue(i).ToString
                        Exit For
                    End If
                End If
            Next
        End While
        reader.Close()

        Dim MyConnection As OleDbConnection
        MyConnection = New OleDbConnection("Provider=" & Oleprovide & ";Data Source=" & existingFile.FullName & ";Extended Properties=""Excel 13.0 Xml;HDR=Yes""")
        MyConnection.Open()
于 2019-01-15T15:17:08.263 に答える