mysql - How to append results of 2 SQL procedures from C# into a single CSV file? -


i have 2 procedures in sql , results should dumped csv file c#. i’m able results of 1 procedure , i’m clueless how go adding results 2nd procedure.

procedure 1. getcsvdata

procedure 2 . getheader

the below c# code gets data csv procedure 1 ('getcsvdata'). please me in integrating data procedure2 (“getheader”) ‘getcsvdata’ , write same csv file.

my c# code:

public string getcsvdata(string sid, string totalrow) {       try     {         sql v = new sql("block_rpt_csv");         v.add("sid",sid);         v.add("totalrow",totalrow);         v.run();          datatable dt=new datatable();          dt.clear();         dt.columns.add("a", typeof(string));         dt.columns.add("b", typeof(string));         dt.columns.add("c", typeof(string));          foreach (system.data.datarow item in v.results.rows)         {             dt.rows.add(item.getstring("name"),item.getstring("id"),             item.getstring("class")          }          dt.acceptchanges();          string csvdata = datatabletocsvfile(dt, sid, totalrow);          system.web.httpresponse response = system.web.httpcontext.current.response;         response.clearcontent();         response.clear();          string filename = "csvview.csv";         response.contenttype = "text/csv";         response.addheader("content-disposition", "attachment;filename=\"" + filename + "\";");          httpcontext.current.response.addheader("content-length", csvdata.length.tostring());         response.write(csvdata);         response.flush();                    response.end();                   ajaxbuilder r = new ajaxbuilder();         r.add("getcsvdata", "success");         return r.tostring();     }    catch (exception e)     {         ajaxbuilder r = new ajaxbuilder();         r.add("getcsvdata", "failed");         r.add("exception_message", e.message);         r.add("exception_stacktrace", e.stacktrace);         return r.tostring();     }  } 

@harvey : sorry missed seeing post until now. code. i've been struggling before saw your's. can please take , @ code , see if can work? else i'll use code. of 20 columns heads displayed in csv , data in each column not match.

private string datatabletocsvfile(datatable dt, string sid, string totalrow) {       datatable dtexcel = dt;     stringbuilder sb = new stringbuilder();     sb.append("csv data");     sb.append("\n");     foreach (datacolumn column in dtexcel.columns)     {         sb.append(column.columnname + ",");    }     sb.append("\n");     foreach (datarow row in dtexcel.rows)     {         (int = 0; < dtexcel.columns.count; i++)         { sb.append(row[i].tostring() + ",");     }         sb.append("\n");     } return sb.tostring();       } 

you can make datatable object global , use same object in both functions.

run whichever want first , insert columns , records id. , then, run second 1 , insert columns , records accordingly.

you can use 2 separate datatable objects each function , merge them after have received results in both.

also, make sure write actual csv generation code @ end afterwards when both functions called.

update :

here's how can write datatable values on csv file :

string csvpath = system.web.hosting.hostingenvironment.mappath("pathtocsv.csv"); streamwriter sw = new streamwriter(csvpath, false); if (dtdatatableslist.rows.count > 0)                         {                             //first write headers.                             int icolcount = dtdatatableslist.columns.count;                              (int = 0; < icolcount; i++)                             {                                 sw.write(dtdatatableslist.columns[i]);                                 if (i < icolcount - 1)                                 {                                     sw.write(",");                                 }                             }                             sw.write(sw.newline);                              // write rows.                             foreach (datarow dr in dtdatatableslist.rows)                             {                                 (int = 0; < icolcount; i++)                                 {                                     if (!convert.isdbnull(dr[i]))                                     {                                         sw.write(dr[i].tostring());                                     }                                     if (i < icolcount - 1)                                     {                                         sw.write(",");                                     }                                 }                                 sw.write(sw.newline);                             }                         } 

now here, since want split columns , write them first , others, have modify for condition bit here , think should fine you.

hope gives idea of how progress this.


Comments