私は新しいので、私に優しくしてください:)
MS Accessファイルのスキーマ定義を読み取るためのC#コードをいくつか作成しました。ほとんどのバージョンのAccessでうまく機能しますが、古いバージョンのAccess(V1.X)を読み込もうとすると、次のエラーが発生します。
このプロパティは、外部データソース、または以前のバージョンのMicrosoftJetで作成されたデータベースではサポートされていません。
これが私のコードです:
private DataTable ReadSchema(string strTable)
{
DataTable schemaTable = new DataTable();
try
{
OleDbConnection conn = new OleDbConnection("Provider= Microsoft.JET.OleDB.4.0;data source=R:\\CB Import\\CBS.MDB");
conn.Open();
OleDbCommand cmd = new OleDbCommand(strTable, conn);
cmd.CommandType = CommandType.TableDirect;
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);
schemaTable = reader.GetSchemaTable();
reader.Close();
conn.Close();
DataColumn dcRec = new DataColumn("TableName", typeof(string));
dcRec.DefaultValue = strTable;
schemaTable.Columns.Add(dcRec);
schemaTable.Columns.Add("Type", typeof(string));
schemaTable.Columns.Add("Length", typeof(string));
foreach (DataRow r in schemaTable.Rows)
{
Console.WriteLine(r["ColumnName"].ToString() + " " + r["ColumnSize"].ToString() + " " + r["DataType"].ToString() + " " + r["NumericPrecision"].ToString() + " " + r["NumericScale"].ToString());
r["Type"] = r["DataType"];
r["Length"] = r["ColumnSize"];
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return (schemaTable);
}
それはこの行で爆撃します:
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);
マシンにAccess2010をインストールしていますが、このバージョンのAccessでこれらの古い厄介なファイルを開こうとしても、古いバージョンを開くときにエラーが発生します。
このコードは、古いバージョンのAccessを読み込もうとしたときとは別に機能します。Access 2007(別のマシンにインストールされている)を使用してデータベースファイルを2007バージョンとして保存することで回避できますが、可能であればこれを自動化(コーディング)できるようにしたいですか?それをコーディングする別の方法、または私が台無しにしている何かがある場合は、私に知らせてください。
どんな助けでも、ビール、チョコレート、花、またはあなたのボートに浮かぶものなら何でも大いに受け取られて、そして受け取られるでしょう:)
前もって感謝します。