我有两个非常长的查询,我正在多个表上运行,使用INNER JOIN。这两个查询之间的唯一区别是,它们为其中一个WHERE子句获取不同的输入值,这些输入值是从两个单独的DropDownLists获取的。保存time 1/time 2列之外,这些查询的结果是相同的。
string query1 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list1.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name";
string query2 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list2.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name";
(请不要为上面的查询的语法而烦恼,我已经执行了这些查询,它们都返回了预期的结果。
我想把这两个表合并成一个数据集(或者任何其他可以用作gridview数据源的结构)。“name”列是唯一的,其他一些列可能也是,我可以检查。我希望最终表列与
名称时间1时间2分析地址
- 列的顺序不是很重要,但如果不是太多的工作,我更喜欢上面的顺序。
- 我想对time 1和time 2执行数学运算,并相应地更新分析列。我用C#还是JS做这个比较好?
目前,我正在使用datatable来收集这两个查询的结果。我尝试使用Datatable.Merge方法,但这实际上使行数加倍(有点像外部连接),尽管列的命名相同(在列中.Add(new DataColumn...)
Datatable dt1 = new datatable;
Datatable dt2 = new datatable;
dt1.Columns.Add(new DataColumn("name", typeof(string)));
dt1.Columns.Add(new DataColumn("time1", typeof(int)));
dt1.Columns.Add(new DataColumn("time2", typeof(int)));
dt1.Columns.Add(new DataColumn("analysis", typeof(string)));
dt1.Columns.Add(new DataColumn("address", typeof(string)));
SqlDataReader dr = cmd1.ExecuteReader();
while (dr.Read())
{
DataRow drow = new DataRow();
drow["name"] = dr["name"].ToString();
drow["time1"] = dr["time1"];
drow["address"] = dr["CurrentTime"].ToString();
dt1.Rows.Add(drow);
}
dr.Close();
dr = cmd2.ExecuteReader();
while (dr.Read())
{
DataRow drow = new DataRow();
drow["time2"] = dr["time1"];
drow["analysis"] = "I need javascript here";
dt2.Rows.Add(drow);
}
dr.Close();
dt1.Merge (dt2);
this.GridView1.DataSource = dt1;
this.GridView1.DataBind;
1条答案
按热度按时间oaxa6hgo1#
答案可以在这里找到。经过几次调整,我让它做了我想做的事情。http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/f122d7f4-3b7d-4d93-bd0f-8bb57cd990a4/