如何检索别名列的实际列名称

时间:2014-01-20 23:14:22

标签: c# sql datatable alias

我需要从DataTable获取真实的列名,我用FillSchema()方法填充它, 这是我使用(SELECT ID AS [SNO],CATEG_NAME AS [Category] FROM Categories)

的查询
        var dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter("SELECT ID AS [SNO],CATEG_NAME AS [Category] FROM Categories",conn);
        da.FillSchema(dt, SchemaType.Source);
        dt.FillBySql(sql);

当我检查dt.columns时,我发现有2列具有查询中提到的相同别名。我该怎么做才能获得真正的专栏names(id, categ_name)

2 个答案:

答案 0 :(得分:1)

我试图添加一个名称与别名列名称相同的列,但只将其留空。 see column

然后我执行此查询:

SELECT 
    status_action,
    isread, 
    CONCAT( 
        FLOOR(HOUR(TIMEDIFF(work_given, sysdate())) / 24), 
        ' days, ', 
        MOD(HOUR(TIMEDIFF(work_given, sysdate())), 24), 
        ' hours, ', 
        MINUTE(TIMEDIFF(work_given, sysdate())), 
        ' minutes') **as** **workgivendays** 
from progressreport

然后我用MySqlDataReader来称呼它 像这样:

MySqlDataReader mdr = cmd.ExecuteReader(); workgivendays = mdr.GetString(“ workgivendays”); 而且有效

答案 1 :(得分:0)

我相信你最好的选择是在C#中改变它们,而不是在SQL中将它们别名。这不是最佳做法,但这种解决方法对我有用。

在数据绑定数据网格视图上,您​​必须更改基础数据表。此示例将列的名称从“ID”更改为“SNO”。确保您更改了表格的副本,因此原始文件保持不变。

var dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("SELECT ID,CATEG_NAME AS [Category] FROM Categories",conn);
da.FillSchema(dt, SchemaType.Source);

dt.FillBySql(sql);
DataTable clonedWithColumnsChanged= dt.Copy();
clonedWithColumnsChanged.Columns["ID"].ColumnName = "SNO";
dgvReports.DataSource = clonedWithColumnsChanged;