2011-10-31 92 views
2

我目前正在编写一个小型应用程序,它接收由SQL存储过程提供的数据,并使其可供非技术精明的用户轻松导出。我试图尽可能通用,因为您应该可以插入任何SP,并按照我的模板创建导出实用程序。我想在从SP本身运行SP之前添加一种获取列名的方法。我曾经假设你可以用不可能的值运行SP,因此不会返回任何内容,然后从得到的VB.NET DataTable中获取列。但是,如果没有返回数据,则列名也不会返回。我如何从SP获取列名而不必对它们进行硬编码?从空白存储过程数据集中获取列名称

+0

表值用户定义函数 是一个选项吗? http://msdn.microsoft.com/en-us/library/ms191165.aspx否则:'从INFORMATION_SCHEMA.COLUMNS WHERE Table_Schema ='dbo'和Table_Name ='TableName'' SELECT Column_Name –

+0

不幸的是,在这种情况下不是:( – wrsenn

回答

2

Table-Valued User-Defined Functions的一个选项吗?

否则:

SELECT Column_Name 
from INFORMATION_SCHEMA.COLUMNS 
WHERE Table_Schema = 'dbo' and Table_Name = 'Table_Name' 

http://msdn.microsoft.com/en-us/library/ms188348.aspx

编辑

即使是空的数据集,通过列的SqlDataReader对象。 因此,如果您从SqlCommand对象中获取读取器,则 会在读取器上调用GetSchemaTable()以获取包含列元数据的DataTable 。 每行的第一列是返回列的名称。

+0

解决了它,但我无法发布自己的答案!即使是空数据集也会将列传递给SqlDataReader。因此,如果您从SqlCommand对象中获取读取器,请在读取器上调用GetSchemaTable()以获取DataTable with column metadata。每一行的第一列是返回列的名称 – wrsenn

+0

@wrsenn:我已经编辑了我的答案,很高兴听到你的解释。 –