加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c#获得access表及字段 名称 类型 长度等信息

(2018-04-20 08:48:27)
标签:

c

access

字段信息

表信息

杂谈

分类: 代码天地

一 程序 运行界面

      

页面布局,几个标签, 一个文本框 textBoxDbName,一个组合框 cbTableName,两个按钮

 一个 数据列表  DataGridView,两个按钮 获得 数据库和表名称。


  

二  程序代码

 

  using System.Data.OleDb;


        string dbase_name = "2016.mdb";
        string table_name = "meirongyi";
        string connnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=2016.mdb" ;

        void table_info()
        {
            connnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + dbase_name;
            OleDbConnection connection = new OleDbConnection(connnectionString);
            connection.Open();
            // 获得数据库中表信息  OleDbSchemaGuid.Tables
            DataTable table = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            foreach (DataRow row in table.Rows)
            {
              cbTableName.Items.Add(row["TABLE_NAME"].ToString());
 
            }
            cbTableName.SelectedIndex=0;
            connection.Close();

        }

 

        void column_info()
        {
            connnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + dbase_name;
            OleDbConnection connection = new OleDbConnection(connnectionString);
            connection.Open();
            // 获得表中列信息  OleDbSchemaGuid.Columns
            DataTable table = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, table_name, null });
            int i = 0;
            DataGridView.Rows.Clear();
            DataGridView.Columns.Add("name", "名称"); //字段名称
            DataGridView.Columns.Add("type", "类型"); //字段类型
            DataGridView.Columns.Add("length", "文本长度"); //长度
            DataGridView.Columns.Add("isnull", "允许空"); //允许空
            DataGridView.Columns.Add("description", "描述");//字段说明、描述
            DataGridView.Columns.Add("identity", "自增");//字段自增
           //int m_cn = table.Columns.IndexOf("COLUMN_NAME");
            //int m_dt = table.Columns.IndexOf("DATA_TYPE");
            //int i=0;
            //DataRow m_DataRow = table.Rows[i];
            //string str = m_DataRow.ItemArray.GetValue(m_cn).ToString();
           

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

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

                switch (lx)
                {
                    case 2: strVal = "int"; break;
                    case 3: strVal = "int"; break;
                    case 4: strVal = "Single"; break;
                    case 5: strVal = "double"; break;
                    case 6: strVal = "decimal"; break;
                    case 7: strVal = "DateTime"; break;
                    case 11: strVal = "bool"; break;
                    case 17: strVal = "byte"; break;
                    case 72: strVal = "string"; break;
                    case 130: strVal = "string"; break;
                    case 131: strVal = "decimal"; break;
                    case 128: strVal = "string"; break;
                    default: strVal = "string"; break;
                }
                DataGridView.Rows[i].Cells["type"].Tag = DataGridView.Rows[i].Cells["type"].Value = strVal.ToString();
                DataGridView.Rows[i].Cells["length"].Value = row["CHARACTER_MAXIMUM_LENGTH"].ToString(); ;
                DataGridView.Rows[i].Cells["isnull"].Value = bool.Parse(row["IS_NULLABLE"].ToString())?"True":"";   
                DataGridView.Rows[i].Cells["description"].Value = row["DESCRIPTION"].ToString();
                DataGridView.Rows[i].Cells["identity"].Value = "";

                i++;
            }
            //获得表的主键信息
            table = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, null);    //主键

            foreach (DataRow row in table.Rows)
            {
                if (table_name == row["TABLE_NAME"].ToString())
                {
                    for (int j = 0; j < DataGridView.RowCount-1; j++)
                    {
                        if (DataGridView.Rows[j].Cells["name"].Value.ToString() == row["COLUMN_NAME"].ToString())
                        {
                            DataGridView.Rows[j].Cells["identity"].Value = true;    //主键
                        }
                    }
                }
            }
            connection.Close();
        }
        private void btnTable_Click(object sender, EventArgs e)
        {
            dbase_name = textBoxDbName.Text;
            table_info();
        }
        private void btnColumn_Click(object sender, EventArgs e)
        {
            table_name = cbTableName.Text;
            column_info();
        }

 

三 程序说明

 

上面获得的是字段的部分信息,当然可以获得表及其字段全部28个信息。下面利用调试的方式逐步获得相关的信息。

 

(一)  表的信息

 1 使用一下语句

            // 获得数据库中表信息  OleDbSchemaGuid.Tables
            DataTable table = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

 

2 表信息
执行到本语句之后设置一个断点,然后,展开临时表变量

table --> Rows --> Base --> 非公共成员 --> System.Data.DataRowCollection-->list-->结果视图

看到的两个元素,说明数据库中有两个表,

c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息

 

3 继续展开 可以看到 两个表 meirongyi 和 test


c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息

 

(二)  字段的信息

 1 使用一下语句

           // 获得表中列信息  OleDbSchemaGuid.Columns
            DataTable table = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, table_name, null });

 

2 查看 每个字段28个属性的序号和名称

 

执行到本语句之后设置一个断点,然后,展开临时表变量

table --> Columns --> Base --> 非公共成员 --> System.Data.DataRowCollection-->list

通过 Columns调用,获得字段信息,每个字段有28项属性
 
- table {Columns} System.Data.DataTable
- Columns {System.Data.DataColumnCollection} System.Data.DataColumnCollection
- 非公共成员
- _list Count 28 System.Collections.ArrayList

+ [0] {TABLE_CATALOG} object {System.Data.DataColumn}
+ [1] {TABLE_SCHEMA} object {System.Data.DataColumn}
+ [2] {TABLE_NAME} object {System.Data.DataColumn}
+ [3] {COLUMN_NAME} object {System.Data.DataColumn}
+ [4] {COLUMN_GUID} object {System.Data.DataColumn}
+ [5] {COLUMN_PROPID} object {System.Data.DataColumn}
+ [6] {ORDINAL_POSITION} object {System.Data.DataColumn}
+ [7] {COLUMN_HASDEFAULT} object {System.Data.DataColumn}
+ [8] {COLUMN_DEFAULT} object {System.Data.DataColumn}
+ [9] {COLUMN_FLAGS} object {System.Data.DataColumn}
+ [10] {IS_NULLABLE} object {System.Data.DataColumn}
+ [11] {DATA_TYPE} object {System.Data.DataColumn}
+ [12] {TYPE_GUID} object {System.Data.DataColumn}
+ [13] {CHARACTER_MAXIMUM_LENGTH} object {System.Data.DataColumn}
+ [14] {CHARACTER_OCTET_LENGTH} object {System.Data.DataColumn}
+ [15] {NUMERIC_PRECISION} object {System.Data.DataColumn}
+ [16] {NUMERIC_SCALE} object {System.Data.DataColumn}
+ [17] {DATETIME_PRECISION} object {System.Data.DataColumn}
+ [18] {CHARACTER_SET_CATALOG} object {System.Data.DataColumn}
+ [19] {CHARACTER_SET_SCHEMA} object {System.Data.DataColumn}
+ [20] {CHARACTER_SET_NAME} object {System.Data.DataColumn}
+ [21] {COLLATION_CATALOG} object {System.Data.DataColumn}
+ [22] {COLLATION_SCHEMA} object {System.Data.DataColumn}
+ [23] {COLLATION_NAME} object {System.Data.DataColumn}
+ [24] {DOMAIN_CATALOG} object {System.Data.DataColumn}
+ [25] {DOMAIN_SCHEMA} object {System.Data.DataColumn}
+ [26] {DOMAIN_NAME} object {System.Data.DataColumn}
+ [27] {DESCRIPTION} object {System.Data.DataColumn}

我们关心的是

 所在表名称 TABLE_NAME
 字段名称 COLUMN_NAME
  11 数据类型 DATA_TYPE
  13 字符型字段的长度  CHARACTER_MAXIMUM_LENGTH
  27 字段描述   DESCRIPTION

c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息

(三) 查看字段的个数

 

table --> Rows --> Base --> 非公共成员 --> System.Data.DataRowCollection-->list-->结果视图

看到8个,说明表有8个字段。


c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息

 

(四) 详细查看某个字段信息

 

table --> Columns --> Base --> 非公共成员 --> System.Data.DataRowCollection-->list-->结果视图

 

1 字符型字段的信息

 这些字段是按字母顺序排序的。

继续展开 其中的[4] --> ItemArray

看到 字符型字段name  ,长度为 40

[2] "meirongyi" object {string}  字段所在的表
[3] "name" object {string}         字段名称
[11] 130 object {int}                  字段类型
[13] 40 object {long}                 字段长度
 

 [27] "姓名" object {string}          字段描述


c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息

 

字符型字段的信息 对应的数据库中的信息



c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息

 

 

3 小数型字段的信息

 

继续展开 其中的[2] --> ItemArray

看到 小数型字段Height   

[2] "meirongyi" object {string}  字段所在的表
[3] "Height  " object {string}         字段名称
[11] 131 object {int}                  字段类型
[15] 18 object {long}                 字段精度
 
[27] "身高" object {string}          字段描述


c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息
 

4 小数型字段的信息 对应的数据库中的信息



c#获得access表及字段 <wbr>名称 <wbr>类型 <wbr>长度等信息

 5 仿此,可以查阅其它类型字段邪恶详细信息。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有