我想使用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();
它将仅返回有关创建表时的信息
答案 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数据库模式中的表的结构和关系相关的大部分数据。
答案 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)