我有一个Access 97数据库,我试图获取数据架构和数据。我不知道有多少表,或者他们调用的是什么,也不知道有哪些列名。
我以编程方式进入数据库没有问题,但是您如何发现架构?
我使用它来获取架构表:
static DataTable GetSchemaTable(string connectionString)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
DataTable schemaTable =
connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
return schemaTable;
}
}
答案 0 :(得分:1)
你的方向很好 对于每个表,您可以再次调用GetOleDbSchemaTable,但在这种情况下,使用不同的参数:
DataTable schemaColumns =
connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new object[] { null, "MyTableName", null, null });
whith OleDbSchemaGuid您可以指定检索哪个架构,并使用过滤器指定表架构
在this link中,您可以找到有关过滤器的信息,例如,按表名称检索列信息。限制是一个数组,您应该将过滤器值放在相应的位置
答案 1 :(得分:1)
OleDbSchemaGuid.Tables
字段的 GetOleDbSchemaTable
返回目录中定义的表(包括视图名称),而对象数组引用此结构:
new object { "table_catalog", "table_schema", "table_name", "table_type" }
OleDbSchemaGuid
由3个字段组成:OleDbSchemaGuid.Tables
,OleDbSchemaGuid.Columns
和OleDbSchemaGuid.Primary_Keys
。要获取表属性,可以使用OleDbSchemaGuid.Columns
字段:
connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new object[] { "table_catalog", "table_schema", "table_name", "column_name" });
由于您要查找表模式,请设置第二个参数并将另一个参数保留为空值:
var columns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new object[] { null, "schema_name", null, null });
如果您想通过表格架构获取属性。表名,也使用第三个参数:
var columns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new object[] { null, "schema_name", "table_name", null });