使用C#检索表模式信息

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

我使用sp_help

查询来检索它,当我在查询窗口中执行它但无法从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(); 

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

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

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

请参见此处: http : //msdn.microsoft.com/en-us/library/ms186778.aspx

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

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

这样,您可以轻松地轻松获取任何表的架构。

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

SqlConnection con=new SqlConnection("connString"); con.Open(); SqlCommand cmd= new SqlCommand("select top(1) * 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]" }); 

字符串数组是一个’filter’,在这里你可以找到你可以过滤的列: 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检索架构信息