使用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();
它将只返回表创建或未创建时的信息
不使用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检索模式信息