I would like to retrieve data from dataset after multi select and union C#
我想从数据集中检索数据(Visual Studio 2010)
这是sql语句:
1 2 3 4 5 6 7 | SELECT NO_IDENT_1 FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) Union SELECT NO_IDENT_2 FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) |
如果我不使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | string sqltring ="SELECT NO_IDENT_1 FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) Union SELECT NO_IDENT_2 FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24})" OleDbConnection ConnFoxPro = new OleDbConnection(Properties.Settings.Default.S_ConnFoxPro26); try { ConnFoxPro.Open(); // MessageBox.Show(" Connection State =" + ConnFoxPro.State); } catch (OleDbException ex) { string errorMessages =""; for (int i = 0; i < ex.Errors.Count; i++) { errorMessages +="Index #" + i +"\ " + "Message:" + ex.Errors[i].Message +"\ " + "NativeError:" + ex.Errors[i].NativeError +"\ " + "Source:" + ex.Errors[i].Source +"\ " + "SQLState:" + ex.Errors[i].SQLState +"\ "; } System.Diagnostics.EventLog log = new System.Diagnostics.EventLog(); log.Source ="Mon application"; log.WriteEntry(errorMessages); Console.WriteLine("Vous avez un exeption. Svp Contacter votre administrateur de system cdd"); } { try { //MessageBox.Show(RqCompte); OleDbDataAdapter DA_ID = new OleDbDataAdapter(sqltring, ConnFoxPro); DataSet Ds_ID = new DataSet(); DA_ID.Fill(Ds_ID,"P240538"); foreach (DataTable thisTable in Ds_ID.Tables) { // For each row, print the values of each column. foreach (DataRow row in thisTable.Rows) { // string rowdata = row.ItemArray[0].ToString().Replace("",""); string rowdata1 = row["NO_IDENT_1"].ToString().Replace("",""); if (rowdata1 !="") liste_No_Ident += rowdata1 +"";// +"NOMBRE =" + row["nbr_doublon"] +"\ \ "; string rowdata2 = row["NO_IDENT_2"].ToString().Replace("",""); if (rowdata2 !="") liste_No_Ident += rowdata2 +"";// +"NOMBRE =" + row["nbr_doublon"] +"\ \ "; } } } catch (Exception e) { } |
对于您要实现的目标,可以保存并集。将查询更改为
1 2 3 | SELECT NO_IDENT_1, NO_IDENT_2 FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) |
您可以保持循环不变。
如果您想使用并集解决方案,则上述语句的组合是正确的,并且您的查询应如下所示:
1 2 3 4 5 6 7 | SELECT NO_IDENT_1 AS NO_IDENT FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) Union All SELECT NO_IDENT_2 AS NO_IDENT FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) |
请记住,应避免使用联合查询,因为它们会对性能产生负面影响。
将查询更改为此:
1 2 3 4 5 6 7 | SELECT NO_IDENT_1 AS IDENT FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) Union SELECT NO_IDENT_2 AS IDENT FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) |
并将您的循环更改为此:
1 2 3 4 5 6 7 8 9 | foreach (DataRow row in thisTable.Rows) { // string rowdata = row.ItemArray[0].ToString().Replace("",""); string rowdata1 = row["IDENT"].ToString().Replace("",""); if (rowdata1 !="") liste_No_Ident += rowdata1 +"";// +"NOMBRE =" + row["nbr_doublon"] +"\ \ "; } |
您只能联合具有相同列定义的数据集。列定义由查询中的第一组确定,在这种情况下,第一列名为
1 2 3 4 5 6 7 | SELECT NO_IDENT_1, NULL AS NO_IDENT_2 FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) Union SELECT NULL AS NO_IDENT_1, NO_IDENT_2 FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) |
在这里,我们在每个查询中都创建了一个虚拟列,以用作其他数据集中不存在的列的占位符。
或者,您可以更改代码以使用类似于以下内容的内容:
1 2 3 4 5 6 7 | SELECT NO_IDENT_1 AS NO_IDENT, 1 AS SOURCE FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) Union SELECT NO_IDENT_2 AS NO_IDENT, 2 AS SOURCE FROM P240538 WHERE (P240538.DATE_dt > {2011/04/24}) |
在这里,我们将结果中的同一列用于相似的数据,并添加了一个新列以帮助我们区分数据的来源。如果您不在乎,则可以始终删除"源"列。
中的第二个
您可以通过访问