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
Post a Comment