2016-10-26 7 views
0

Ich versuche, zwei .NETDataTablesDataTable.Merge nicht verschmelzenden

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())); 
} 

das Ergebnis zu verschmelzen, ist leider eine Tabelle mit null Feldern für die jeweilige fehlt Spalte der Tabelle.

+0

Wo ist der Aufruf zu 'Merge'? – wablab

+0

dtCalls.Merge (dtPages, false, MissingSchemaAction.Add); –

+0

Ergibt 'dtCalls' eine Zeilenanzahl, die der Zeilenanzahl von' dtCalls' plus der Zeilenanzahl von 'dtPages' entspricht? Ergibt es auch eine neue Spalte namens "Bestellungen"? – wablab

Antwort

1

Es sieht so aus, als ob das Problem darin besteht, dass Sie keine Primärschlüssel für die Tabellen festgelegt haben. Daher weiß Merge nicht, wie die Zeilen für denselben Mitarbeiter (und Datum?) In eine einzelne Zeile zusammengeführt werden. Das Ergebnis ist wahrscheinlich, dass Sie mit einer Vereinigung der beiden Tabellen enden. Versuchen Sie, den Primärschlüssel in jeder Tabelle über etwas wie dtCalls.PrimaryKey = new DataColumn[] { dtCalls.Columns[0], dtCalls.Columns[1] }; (vorausgesetzt Datum ist Teil des PK hier) zu setzen. Tun Sie dasselbe für dtPages, und versuchen Sie es dann erneut.

Verwandte Themen