zoukankan      html  css  js  c++  java
  • C# 如何获取SQL Server 中指定数据表的所有字段名和字段类型

    接上篇:C# 如何确定SQL Server 中数据表是否存在 ,我们继续研究SqlConnection.GetSchema 方法,看看如何获取指定数据表的所有字段名和字段类型。SqlConnection.GetSchema方法有2个重载形式,获取指定数据表的所有字段名和字段类型的秘密就在GetSchema (String, String[])的第二个参数中。

    定义如下:

    public override DataTable GetSchema(
        string collectionName,
        string[] restrictionValues
    )

    参数collectionName指定要返回的架构的名称,取值为静态类 SqlClientMetaDataCollectionNames的成员,如果要取列信息,则取值为SqlClientMetaDataCollectionNames.Columns。

    关于SqlClientMetaDataCollectionNames类成员的详细信息参见:https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlclientmetadatacollectionnames_fields(v=vs.100).aspx

    参数restrictionValues为请求架构的一组限制值,对于不同的架构集类型,有不同的写法。要具体了解,可以调用GetSchema("Restrictions") 方法。

    针对SQL Server 数据库,restrictionValues的长度为4,其中restrictionValues[0]Catalog(数据库名)restrictionValues[1]Owner(所有者)restrictionValues[2]Table(表名)restrictionValues[3]Column(列名)

    我们要查询某张表中的列名等信息,则可以通过设置restrictionValues[2]="SomeTableName"来实现。

    实现代码如下:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace scratchline.cn
    {
        public struct Field
        {
            public string Name;
            public string Type;
        }
    
        public class scratchline
        {
            public List<Field> GetFileds(string connectionString, string tableName)
            {
                List<Field> _Fields = new List<Field>();
                SqlConnection _Connection = new SqlConnection(connectionString);
                try
                {
                    _Connection.Open();
    
                    string[] restrictionValues = new string[4];
                    restrictionValues[0] = null; // Catalog
                    restrictionValues[1] = null; // Owner
                    restrictionValues[2] = tableName; // Table
                    restrictionValues[3] = null; // Column
    
                    using (DataTable dt = _Connection.GetSchema(SqlClientMetaDataCollectionNames.Columns, restrictionValues))
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            Field field;
                            field.Name = dr["column_name"].ToString();
                            field.Type = dr["data_type"].ToString();
                            _Fields.Add(field);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    _Connection.Dispose();
                }
    
                return _Fields;
            }
        }
    }
    View Code

    总结:SqlConnection.GetSchema方法用于获取数据库架构信息,通过不同参数的组合可实现各种数据架构信息的获取功能。

  • 相关阅读:
    ubuntu下minicom和usb串口转接
    linux下 驱动模块编译步骤
    linux下的压缩解压命令
    GitLab 数据备份和恢复
    GitLab 项目创建后地址由Localhost改为实际IP的方法
    GitLab-Runner 安装配置
    GitLab 的安装及汉化
    用yum rpm 快速安装zabbix agent
    RabbitMQ的用户管理方法
    Linux下安装部署RabbitMQ
  • 原文地址:https://www.cnblogs.com/two/p/5224656.html
Copyright © 2011-2022 走看看