C#datatable来自sql join 2列同名

时间:2009-08-07 07:33:09

标签: c# sql winforms

我有一个像这样的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语句,取出*并放入列别名)。

2 个答案:

答案 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的标题应该与第一列的标题不同。