我是新人,所以对我温柔:)
我创建了一些 C# 代码来读取 MS Access 文件的架构定义。它适用于大多数版本的 Access,但是当我尝试阅读旧版本的 Access (V1.X) 时,我收到以下错误:
外部数据源或使用以前版本的 Microsoft Jet 创建的数据库不支持此属性。
这是我的代码:
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);
我的机器上安装了 Access 2010,即使我尝试在此版本的 Access 中打开这些旧的麻烦文件,我仍然会收到有关打开旧版本的错误。
除了我尝试阅读旧版本的 Access 时,此代码都可以正常工作。我可以通过使用 Access 2007(安装在另一台机器上)并将数据库文件保存为 2007 版本来解决它,但如果可能的话,我希望能够自动化(编码)这个?如果有另一种编码方式,或者我搞砸了,请告诉我。
任何帮助都将得到极大的欢迎,并用啤酒、巧克力、鲜花或任何漂浮在你船上的东西来回报:)
提前致谢。