使用C#检索表模式信息

时间:2011-11-24 12:47:33

标签: c# sql

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

我使用sp_help <table_name>查询来检索它,当我在查询窗口中执行它但无法从C#中检索它时,它运行良好。我想检索两个表之间映射所需的所有表信息,如name,datatype,size,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(); 

它将仅返回有关创建表时的信息

8 个答案:

答案 0 :(得分:3)

您可以尝试以下选项,而不是使用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')

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我认为sp_help会返回多个结果集,因此您需要使用NextResult,此处有更多详细信息 - http://support.microsoft.com/kb/311274(示例不是sp_help具体但它应该给你一般的想法)

答案 3 :(得分:1)

我有一种获取表格架构的简单方法。 只需与SqlConnection对象之类的任何提供程序创建连接。 为select查询创建一个命令对象(仅选择前1个记录,因为您只需要表的模式) 执行返回DataReader对象的查询。 每个DataReader对象都有一个名为GetTableSchema()的方法,它返回DataTable对象,该对象具有一个perticulat表的模式。

通过这种方式,您可以轻松地轻松获取任何表的架构。

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

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表的架构信息。

答案 4 :(得分:1)

此外,您可以使用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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)