如何获取指定数据表的所有字段名和字段类型。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"来实现。
实现代码如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 6 namespace scratchline.cn 7 { 8 public struct Field 9 { 10 public string Name; 11 public string Type; 12 } 13 14 public class scratchline 15 { 16 public List<Field> GetFileds(string connectionString, string tableName) 17 { 18 List<Field> _Fields = new List<Field>(); 19 SqlConnection _Connection = new SqlConnection(connectionString); 20 try 21 { 22 _Connection.Open(); 23 24 string[] restrictionValues = new string[4]; 25 restrictionValues[0] = null; // Catalog 26 restrictionValues[1] = null; // Owner 27 restrictionValues[2] = tableName; // Table 28 restrictionValues[3] = null; // Column 29 30 using (DataTable dt = _Connection.GetSchema(SqlClientMetaDataCollectionNames.Columns, restrictionValues)) 31 { 32 foreach (DataRow dr in dt.Rows) 33 { 34 Field field; 35 field.Name = dr["column_name"].ToString(); 36 field.Type = dr["data_type"].ToString(); 37 _Fields.Add(field); 38 } 39 } 40 } 41 catch (Exception ex) 42 { 43 throw ex; 44 } 45 finally 46 { 47 _Connection.Dispose(); 48 } 49 50 return _Fields; 51 } 52 } 53 }
总结:SqlConnection.GetSchema方法用于获取数据库架构信息,通过不同参数的组合可实现各种数据架构信息的获取功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律