C#返回数据库架构信息

前言

编写MIS程序时多多少少都需要返回数据库的架构信息,尤其是当编写自定义查询子系统时更是离不开。

正文

通过查询MSDN发现OleDbConnection的GetOleDbSchemaTable方法可以返回指定已连接的数据库的架构信息,但是 GetOleDbSchemaTable的具体用法却并没有在MSDN中详述,经过网上查询找到一篇微软的文章,对该方法作了详细的阐述,尤其是对 GetOleDbSchemaTable的第二个参数(限制数组的参数)做了详细描述,解决了很多网友的质疑,为什么 GetOleDbSchemaTable方法的调用要写成:

SchemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });

在微软编号为 309681 的文章中对此做了描述,如下所示: 限制是一个过滤值对象数组,每个元素对应于结果 DataTable 中的一个 DataColumn。OleDbSchemaGuid 参数决定了相应的限制。例如,在指定表的 OleDbSchemaGuid 时,限制数组如下所示:

{TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE}

原文链接如下:http://support.microsoft.com/kb/309681/zh-cn

我们自己版本的返回数据库架构信息的源码如下: 返回表信息:

using (OleDbConnection conn = new OleDbConnection(textBox1.Text))
{
    try
    {
        conn.Open();
        SchemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
        for (int i = 0; i < SchemaTable.Rows.Count; i++)
        {
            arrTables.Add(SchemaTable.Rows[i].ItemArray[2].ToString());
        }
        SchemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "VIEW" });
        for (int i = 0; i < SchemaTable.Rows.Count; i++)
        {
            arrViews.Add(SchemaTable.Rows[i].ItemArray[2].ToString());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "连接失败");
    }
}

返回指定表或视图的字段信息如下:

using (OleDbConnection conn = new OleDbConnection(textBox1.Text))
{
    try
    {
        conn.Open();
        listBox3.Items.Clear();
        DataTable dtField = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, tableName });
        foreach (DataRow dr in dtField.Rows)
        {
            arrFields.Add(dr["COLUMN_NAME"].ToString());
        }
        return arrFields;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "连接失败");
        return null;
    }
}

在我们程序中使用了ArrayList暂存返回的表、视图和字段列表信息,然后再通过ListBox.Items.AddRange(ArrayList.ToArray())方法将列表信息实际显示在ListBox中。

本示例程序在Visual Studio 2008 SP1 + SQL Server 2008 + Windows XP SP3 下编译调试通过。

C#返回数据库架构信息

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动到顶部