如何获取指定数据表的所有字段名和字段类型。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[];
restrictionValues[] = null; // Catalog
restrictionValues[] = null; // Owner
restrictionValues[] = tableName; // Table
restrictionValues[] = 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;
}
}
}

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

C# 如何获取SQL Server 中指定数据表的所有字段名和字段类型的更多相关文章

  1. Sql Server系列:数据表操作

    表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...

  2. ASP.NET用SQL Server中的数据来生成JSON字符串

    原文引自:  作者: 缺水的海豚  来源: 博客园  发布时间: 2010-09-21 21:47  阅读: 6136 次  推荐: 0   原文链接   [收藏] 摘要:ExtJs用到的数据内容基本 ...

  3. Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)

    Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.S ...

  4. 最简单删除SQL Server中所有数据的方法

     最简单删除SQL Server中所有数据的方法 编写人:CC阿爸 2014-3-14 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间 ...

  5. Sql server中如何将表A和表B的数据合并(乘积方式)

    sql server中如何将表A 和表B的数据合并成乘积方式,也就是说表A有2条数据,表B有3条数据,乘积后有6条数据, 这就要用到sql中的笛卡尔积方式了 1.什么是笛卡尔积 笛卡尔积在SQL中的实 ...

  6. SQL Server中误删除数据的恢复

    SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的数据库完全备份. 2. 数据库的恢复模式(Recovery m ...

  7. MS SQL SERVER 中的系统表

    MS SQL SERVER 中的系统表 序号 名称 说明 备注 1 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.   2 syscomments 包含每 ...

  8. 【SQL Server】sql server更改了数据表的字段/新增数据表的字段 无法保存

    sql server更改了数据表的字段/新增数据表的字段  无法保存 解决方法:进入 工具-->选项-->Designers-->表设计器和数据库设计器-->取消勾选   即可

  9. (转)SQLServer_十步优化SQL Server中的数据访问 三

    原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第六步:应用高级索引 实施计算列并在这些列上创建索引 你可能曾经写过从 ...

随机推荐

  1. 自学python之路(day4)

    一 购物车小程序 goods=[{}, {}, {}] shop_car={} li=[] ,len(goods)): li.append(i) money=input('请输入您的总金额:') if ...

  2. tomcat管理监控工具:probe(可代替Tomcat Manager)

    版本信息:tomcat8减压版.probe 3.0.0 修改tomcat用户配置,在conf\tomcat-users.xml加入一下配置: <role rolename="admin ...

  3. python—DAY1

    # user = "123"# possword = "111"# count = 0## while count < 3:# user_name = i ...

  4. Tecplot: Legend显示与否

    有时候不想显示多个数据中的某些数据的legend,只需要在Mapping style中的definition最后一列,show in legend 改为never就好了.

  5. 个人项目cpu占用图

  6. Centos7-跟踪用户操作记录并录入日志

    1. 添加bash全局配置文件: cd /etc/profile.d sudo -e vi log_command.sh 输入如下内容: export PROMPT_COMMAND='RETRN_VA ...

  7. ArcMap图层属性表中添加图片

    一看标题是不是有点懵?懵就对了!刚接触到的时候我也有点懵,属性表不是都是文本啊数字啊之类的格式,怎么还可以存图片,下面就带大家来看看吧! 一.关于图层入库问题 图层进入数据库和图层以shp格式存储时, ...

  8. 页面布局 ——图片自动按比例显示&&图片随外部div的增大而按比例增大

    图片按比例显示,分为两种情况. 1.空的div内加图片 <div class="emty"><img src="img/my.png"> ...

  9. 小妖精的完美游戏教室——东方PROJECT,同人,墙

    //================================================================//// Copyright (C) 东方同人社// All Rig ...

  10. 随笔:关于Class.getSimpleName()

    最近学习过程中,遇到了Class.getSimpleName()这个方法,就搜索了一些资料: API定义: Class.getName():以String的形式,返回Class对象的"实体& ...