DataTable.Merge没有合并

时间:2016-10-26 16:42:42

标签: c# .net datatable

我试图合并两个// Set data-stripe $form->get('company_data') ->get('legalName')->setAttributes(['attr' => ['data-stripe', 'name']]); .NET

DataTables

不幸的是,结果是每个相应表格缺少列的DataTable dtCalls = new DataTable(); dtCalls.Columns.Add("EmpID",typeof(string)); dtCalls.Columns.Add("Date",typeof(DateTime)); dtCalls.Columns.Add("Calls",typeof(int)); DataTable dtPages = new DataTable(); dtPages.Columns.Add("EmpID",typeof(string)); dtPages.Columns.Add("Date",typeof(DateTime)); dtPages.Columns.Add("Orders",typeof(int)); SqlCommand commRetrieveCalls = new SqlCommand(strRetrieveCalls,conn); SqlDataAdapter adpRetrieveCalls = new SqlDataAdapter(commRetrieveCalls); DataSet dsRetrieveCalls = new DataSet(); adpRetrieveCalls.Fill(dsRetrieveCalls); DataTable dtRetrieveCalls = dsRetrieveCalls.Tables[0]; foreach(DataRow dr in dtRetrieveCalls.Rows) { dtCalls.Rows.Add(dr[0].ToString(),DateTime.Parse(dr[1].ToString()),Convert.ToInt32(dr[2].ToString())); } SqlCommand commRetrieveOrders = new SqlCommand(strRetrievePages,conn); SqlDataAdapter adpRetrieveOrders = new SqlDataAdapter(commRetrieveOrders); DataSet dsRetrieveOrders = new DataSet(); adpRetrieveOrders.Fill(dsRetrieveOrders); DataTable dtRetrieveOrders = dsRetrieveOrders.Tables[0]; foreach(DataRow drOrder in dtRetrieveOrders.Rows) { dtPages.Rows.Add(drOrder[0].ToString(),DateTime.Parse(drOrder[1].ToString()),Convert.ToInt32(drOrder[2].ToString())); } 个字段。

1 个答案:

答案 0 :(得分:1)

看起来问题是您没有为表建立主键,因此Merge不知道如何将同一员工(和日期?)的行合并为一行。结果很可能是你最终得到了两个表的联合。尝试通过类似dtCalls.PrimaryKey = new DataColumn[] { dtCalls.Columns[0], dtCalls.Columns[1] };的设置在每个表中设置主键(假设日期是PK的一部分)。对dtPages执行相同操作,然后再次尝试合并。