使用c#检索表模式信息

本文关键字:模式 信息 检索 使用 | 更新日期: 2023-09-27 18:15:32

我想用c#检索表模式信息。

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

我写了下面的代码

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(); 

它将只返回表创建或未创建时的信息

使用c#检索表模式信息

不使用sp_help,您可以尝试以下选项:

1)使用INFORMATION_SCHEMA。列视图:

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')

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

您可能会发现使用INFORMATION_SCHEMA视图更容易—您可以构建查询,提取与SQL Server数据库模式中表的结构和关系相关的大部分数据。

请看这里:http://msdn.microsoft.com/en-us/library/ms186778.aspx

我有一个简单的方法来获得一个表的模式。只需与SqlConnection对象等任何提供程序创建连接。为select查询创建一个命令对象(因为只需要表的模式,所以只选择前1条记录)执行返回DataReader对象的查询。每个DataReader对象都有一个名为GetTableSchema()的方法,该方法返回具有特定表模式的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的模式信息。地址表。

我认为sp_help返回多个结果集,所以你需要使用NextResult,这里有更多的细节- http://support.microsoft.com/kb/311274(这个例子不是sp_help特定的,但它应该给你一般的想法)

还可以使用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/en-us/library/ms254969.aspx

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

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

自。net 2.0以来,SqlConnection类提供了GetSchemaMethod方法,您可以使用它来检索所请求的信息。

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

看这个…它解释了

如何使用GetOleDbSchemaTable和Visual c# .NET检索模式信息