我需要从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)
?
答案 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;