C# 使用别名获取列名

C# 使用别名获取列名,c#,sql,sql-server-2008,C#,Sql,Sql Server 2008,我使用的是SQL Server 2008,我的SP如下所示: SELECT id = t.nTableId ,t.nTableId AS id2 ,t.nTableId FROM dbo.table AS t 我正在使用一个.NET应用程序,其中我需要列名: id、id2和nTableId 现在,我使用sp_helptext将sp作为字符串列表获取 var columns = new List<string>(); using (var reader

我使用的是SQL Server 2008,我的SP如下所示:

SELECT id = t.nTableId
       ,t.nTableId AS id2
       ,t.nTableId
FROM   dbo.table AS t
我正在使用一个.NET应用程序,其中我需要列名: id、id2和nTableId

现在,我使用sp_helptext将sp作为字符串列表获取

var columns = new List<string>();
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        columns.Add(reader.GetString(0));
    }
}
var columns=newlist();
使用(var reader=cmd.ExecuteReader())
{
while(reader.Read())
{
columns.Add(reader.GetString(0));
}
}
在这个字符串列表中,我试图找到SELECT和FROM,然后取这两个字符串之间的行。我对这些行进行格式化,以使其在之后看起来正确

问题是我觉得这个解决方案不够好。在这种情况下,你们有什么技巧可以用于SQL Server 2008检索列名id、id2和nTableId。

var columns=new List();
var columns = new List<string>();
DbCommand cmd = cnn.CreateCommand("SELECT * FROM Table1",  CommandType.Text);
DataTable Dt= cnn.GetDataTable(cmd);
foreach (System.Data.DataColumn col in dt.Columns)
{
    columns.Add(col.ColumnName);
}
DbCommand cmd=cnn.CreateCommand(“从表1中选择*命令”,CommandType.Text); DataTable Dt=cnn.GetDataTable(cmd); foreach(System.Data.DataColumn列,在dt.Columns中) { columns.Add(col.ColumnName); }
这将是一个两步过程。 首先触发一个使用存储过程的查询,这样就不会返回任何数据。 比如:

从OPENQUERY(LOCALSERVER,'EXEC your_storage_procedure')中选择*,其中1=2

由于该条件永远不会为true,因此不会返回任何数据。我们需要使用OPENQUERY(主要用于链接服务器),因为我们希望动态修改存储过程查询

现在,您可以使用读取器提取空结果集的表模式

using(var reader = command.ExecuteReader())
{
      // This will return false - we don't care, we just want to make sure the schema table is there.
         reader.Read();
         var table = reader.GetSchemaTable();
         foreach (DataColumn column in table.Columns)
         {
             Console.WriteLine(column.ColumnName);
         }
 }

可能是您正在寻找的,并且不涉及整个字符串操作堆。为什么需要列名?“听起来像是XY问题。”理查德汉塞尔说,我这边付出了很大的努力,结果就是这样。我去看看@SriramSakthivel,因为我在应用程序中使用它基于列名创建XML文件