获取所有表

string connnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Xtxx.db.dbwz;

OleDbConnection connection
= new OleDbConnection(connnectionString);
connection.Open();

DataTable table
= connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

foreach (DataRow row in table.Rows)
{
TreeNode treeNode
= new TreeNode();
treeNode.Tag
= "数据表";
treeNode.Text
= row["TABLE_NAME"].ToString();

tvSjk.SelectedNode.Nodes.Add(treeNode);
}
connection.Close();


获取数据表详细信息

string connnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Xtxx.db.dbwz;

OleDbConnection connection
= new OleDbConnection(connnectionString);
connection.Open();

DataTable table
= connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, sjbmc, null });

int i = 0;

dgv.Rows.Clear();

foreach (DataRow row in table.Rows)
{
dgv.Rows.Add(
1);
dgv.Rows[i].Cells[
"dgv_Mc"].Value = row["COLUMN_NAME"].ToString(); //字段名称

int lx = int.Parse(row["DATA_TYPE"].ToString()); //字段类型

switch (lx)
{
case 2: dgv.Rows[i].Cells["dgv_Lx"].Value = "int"; break;
case 3: dgv.Rows[i].Cells["dgv_Lx"].Value = "int"; break;
case 4: dgv.Rows[i].Cells["dgv_Lx"].Value = "Single"; break;
case 5: dgv.Rows[i].Cells["dgv_Lx"].Value = "double"; break;
case 6: dgv.Rows[i].Cells["dgv_Lx"].Value = "decimal"; break;
case 7: dgv.Rows[i].Cells["dgv_Lx"].Value = "DateTime"; break;
case 11: dgv.Rows[i].Cells["dgv_Lx"].Value = "bool"; break;
case 17: dgv.Rows[i].Cells["dgv_Lx"].Value = "byte"; break;
case 72: dgv.Rows[i].Cells["dgv_Lx"].Value = "string"; break;
case 130: dgv.Rows[i].Cells["dgv_Lx"].Value = "string"; break;
case 131: dgv.Rows[i].Cells["dgv_Lx"].Value = "decimal"; break;
case 128: dgv.Rows[i].Cells["dgv_Lx"].Value = "string"; break;
default: dgv.Rows[i].Cells["dgv_Lx"].Value = "string"; break;
}
dgv.Rows[i].Cells[
"dgv_Lx"].Tag = dgv.Rows[i].Cells["dgv_Lx"].Value.ToString();
dgv.Rows[i].Cells[
"dgv_Yxk"].Value = bool.Parse(row["IS_NULLABLE"].ToString()); //允许空
dgv.Rows[i].Cells["dgv_Ms"].Value = row["DESCRIPTION"].ToString(); //字段说明、描述
dgv.Rows[i].Cells["dgv_Zj"].Value = false;

i
++;
}

table
= connection.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, null); //主键

foreach (DataRow row in table.Rows)
{
if (sjbmc == row["TABLE_NAME"].ToString())
{
for (int j = 0; j < dgv.RowCount; j++)
{
if (dgv.Rows[j].Cells["dgv_mc"].Value.ToString() == row["COLUMN_NAME"].ToString())
{
dgv.Rows[j].Cells[
"dgv_Zj"].Value = true; //主键
}
}
}
}

connection.Close();

没有实现获取字段编号列,那位有获取自动编号列的的方法,请留言告诉我。谢谢!


参考的资料:

使用 DataReader GetSchemaTable 方法和 Visual C# .NET 检索列架构

http://support.microsoft.com/kb/309681/zh-cn

http://support.microsoft.com/kb/310107/zh-CN

GetOleDbSchemaTable DATA_TYPE AutoNumber

http://social.msdn.microsoft.com/Forums/zh-CN/adodotnetdataproviders/thread/eb845da8-6e15-41a9-8be7-

.NET获取ACCESS自动编号列的一种方法(转)

3e84ae3e1fechttp://www.cnblogs.com/aion111/archive/2010/07/16/1778956.html   (这篇中获取自动编号列的方法视乎有问题)