データを Access データベースにエクスポートする必要があります。私のコードは機能しますが、クライアント コンピューターに有効なプロバイダーとして Microsoft.Jet.OLEDB.4.0 があるという前提で機能します。
これが正しいかどうかをコードでテストしたいと思います。私の問題は、既存のアクセス データベースの場所がなく、接続を確認してから削除するために使用する新しい .mdb を作成したくないことです。
どのプロバイダーがインストールされているかを確認する方法はありますか?
データを Access データベースにエクスポートする必要があります。私のコードは機能しますが、クライアント コンピューターに有効なプロバイダーとして Microsoft.Jet.OLEDB.4.0 があるという前提で機能します。
これが正しいかどうかをコードでテストしたいと思います。私の問題は、既存のアクセス データベースの場所がなく、接続を確認してから削除するために使用する新しい .mdb を作成したくないことです。
どのプロバイダーがインストールされているかを確認する方法はありますか?
の存在を簡単に確認できます。
HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}
これは、Microsoft.Jet.OLEDB.4.0 の CLSID です。
マシンで MDAC のバージョンを検出し、そのプロバイダがサポートされているかどうかを推定することはできますか?
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=47262&lngWId=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");
「正しく修正し、テストのバグに噛まれないようにする」ことを忘れないでください
.NET Framework がインストールされている (VB.NET コードを実行する必要がある) 場合、マシンにはあなたが言及したプロバイダーがあると思います。 MSDN
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()