【发布时间】:2015-04-28 17:54:13
【问题描述】:
我正在自学 C# 和 .NET。我正在尝试学习如何使用GetSchema。
我想要做的是:
打开 MS Access 数据库并使用数据库模式填充树视图控件。我想用用户创建的表名填充父节点,它们的子节点将包含列名。
我尝试修改上面链接的代码示例,但失败了。
代码如下:
using (OleDbConnection OleDBConnection = new OleDbConnection())
{
OleDBConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + databaseLocation + ";Persist Security Info=False;";
try
{
OleDBConnection.Open();
// get database schema
DataTable dataTable = OleDBConnection.GetSchema("Tables");
// clear the treeview
TreeView.Nodes.Clear();
// here I tried to populate the treeview but have failed
foreach (System.Data.DataRow row in dataTable.Rows)
{
// add parent node -> table name
TreeView.Nodes.Add(row["TABLE_NAME"].ToString());
// now add children -> all table columns
foreach(DataColumn column in dataTable.Columns)
{
TreeView.Nodes.Add(column.ColumnName);
}
}
// all done, close the connection
OleDBConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Application.Exit();
}
}
我在 Northwind 数据库上测试时得到的结果如下:
- Customers
- TABLE_CATALOG
- TABLE_SCHEMA
- TABLE_NAME
- TABLE_TYPE
- TABLE_GUID
- DESCRIPTION
- TABLE_PROPID
- DATE_CREATED
- DATE_MODIFIED
- Employees
- TABLE_CATALOG
- TABLE_SCHEMA
- TABLE_NAME
- TABLE_TYPE
- TABLE_GUID
- DESCRIPTION
- TABLE_PROPID
- DATE_CREATED
- DATE_MODIFIED
...
上述结果的问题在于它还包括非用户创建的表作为父节点,并且我没有从这些表中获取列名(相反,我为每个表获取 TABLE_CATALOG 等)。
问题:
如何将用户创建的表加载为父节点,并添加包含这些表列名的子节点?
再次,如果解决方案是微不足道的,我深表歉意,但请记住,这是我的第一次尝试,因为我刚刚开始使用 C# 和 .NET
【问题讨论】:
标签: c# .net treeview database-schema