我有一个像这样的sql select,它返回一个数据表:
select * from table1 a join table2 b on a.id=b.id
table1和table2都有一个名为itemno的列。
我如何引用2个单独的列?通常我会使用类似的东西:
datarow["itemno"].ToString(); <=first column named itemno only
datarow["b.itemno"].ToString(); <= fail
然而,这似乎只能得到名为itemno的第一列。
有没有办法在不更改我的sql语句的情况下引用名为itemno的第二列? (我知道我可以更改我的sql语句,取出*并放入列别名)。
答案 0 :(得分:3)
您可以通过索引来引用列:
datarow[0].ToString();
不过,老实说,我更喜欢别名他们。
答案 1 :(得分:0)
给出这样的SQL查询
select a.id, b.id, a.columnA,a.columnB,a.itemno,b.itemno
from table1 a
join table2 b on a.id=b.id
您的C#代码将/将看起来像这样以读取所有行和所有列:
using (SqlCommand getAllColumns = new SqlCommand("select a.id, b.id,a.columnA,a.columnB,a.itemno,b.itemno from table1 a join table2 b on a.id=b.id", conn))
{
using (var drreader = getAllColumns.ExecuteReader())
{
DataTable tb = new DataTable();
tb.BeginLoadData();
tb.Load(drreader);
tb.EndLoadData();
foreach(DataRow row in tb.Rows.Cast<DataRow>().ToList())
{
// assuming these are all varchar columns
string idA = (string)row["id"];
string idB = (string)row["id1"];
string columnA = (string)row["columnA"];
string columnB = (string)row["columnB"];
string columnAItemNo = (string)row["itemno"]; //fetches the first itemno column, a.itemno in this case
string columnBItemNo = (string)row["itemno1"]; //fetches the second itemno column, b.itemno in this case
}
}
}
我在.NET Framework 4.5上使用它。如果要验证或调试,请在foreach
行上放置一个断点并检查DataTable
对象。第二列itemno
的标题应该与第一列的标题不同。