繁体   English   中英

使用C#检索表架构信息

[英]Retrieving table schema information using C#

我想使用C#检索表架构信息。

我使用sp_help <table_name>查询来检索它,当我在查询窗口中执行它但从C#中检索到它时,效果很好。 我想检索在两个表之间进行映射所必需的所有表信息,例如名称,数据类型,大小,isprimary,键等。

我写下了以下代码

SqlCommand cmd = sourceCon.CreateCommand();
cmd.CommandText = string.Format("sp_help '{0}'", cmbSourceTable.SelectedItem.ToString()); //cmd.CommandType = CommandType.StoredProcedure; 
sourceDataTable = new DataTable(); 
SqlDataReader dr = cmd.ExecuteReader(); 
sourceDataTable.Load(dr);
dr.Close(); 

它将仅返回有关表的信息,无论是否创建

可以使用以下选项来代替使用sp_help:

1)使用INFORMATION_SCHEMA.COLUMNS视图:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTable'

2)查询sys.columns

SELECT c.*, t.name
FROM sys.columns c
    JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID('YourTable')

这些只是2个将返回单个结果集的选项。 INFORMATION_SCHEMA.COLUMNS不会告诉您(例如)一列是否为IDENTITY列,而sys.columns路由会告诉您。 您可以从目录视图中获得更多信息,这取决于您还需要什么。 这是MSDN参考

您可能会发现使用INFORMATION_SCHEMA视图更容易-您可以构建查询来提取与SQL Server数据库架构中的表的结构和表之间的关系有关的大多数数据。

看到这里: http : //msdn.microsoft.com/zh-cn/library/ms186778.aspx

我认为sp_help返回多个结果集,因此您需要使用NextResult ,这里有更多详细信息NextResult : //support.microsoft.com/kb/311274 (示例不是特定于sp_help但应该可以为您提供一般的想法)

我有一种简单的方法来获取表的架构。 只需与任何提供程序(如SqlConnection对象)创建连接。 创建一个用于选择查询的命令对象(仅选择前1条记录,只需要表的架构)执行该查询,该查询返回一个DataReader对象。 每个DataReader对象都有一个称为GetTableSchema()的方法,该方法返回具有Perticulat表模式的DataTable对象。

这样,您可以轻松地获取任何表的架构,而无需花费很多精力。

在这里,我将为此提供一个简单的代码

SqlConnection con=new SqlConnection("connString");
con.Open();
SqlCommand cmd= new SqlCommand("select top 0 * from Person.Address",con);
DataTable table = cmd.ExecuteReader().GetTableSchema();

现在,此表对象具有Person.Address表的架构信息。

另外,您可以使用SqlConnection中的GetSchema方法。 http://msdn.microsoft.com/en-us/library/ms136367.aspx

像这样:

var tableSchema = con.GetSchema(SqlClientMetaDataCollectionNames.Tables, new string[] { null, null, "[tableName]" });

字符串数组是一个“过滤器”,在这里您可以找到可以过滤的列: http : //msdn.microsoft.com/zh-cn/library/ms254969.aspx

有关其他数据库服务器和更多信息,请访问: http : //msdn.microsoft.com/en-us/library/kcax58fh.aspx

从.net 2.0开始,SqlConnection类提供了GetSchemaMethod,您可以使用它来检索请求的信息。

http://msdn.microsoft.com/zh-CN/library/ms136364(v=vs.80).aspx

sp_help在您的代码中不起作用? 也许您需要包含一条execute语句:exec sp_help。 或应用程序在没有sp_help权限的帐户下运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM