| c# windows程序通過WebService傳輸數(shù)據(jù),如果傳輸?shù)臄?shù)據(jù)是DataSet,把DataSet轉(zhuǎn)換成string進(jìn)行傳輸,可以大大降低傳輸時(shí)間! //客戶端 private string DataSetToString(DataSet ds) { //!@&為表的連接字符串,#$%為行的連接字符串,^&*為字段的連接字符串 //為了保證連接字符串不在DataSet數(shù)據(jù)中存在,連接字符串盡量復(fù)雜! StringBuilder strData = new StringBuilder(); foreach (DataTable dt in ds.Tables)//遍歷ds的表 { if (strData.Length > 0)//從第一個(gè)表開始,加上表的連接字符串 strData.Append("!@&"); for (int m = 0; m < dt.Rows.Count; m++)//遍歷dt的行 { DataRow row = dt.Rows[m]; for (int n = 0; n < dt.Columns.Count; n++)//遍歷row的列 { if (m > 0)//從第二行數(shù)據(jù)開始,加上行的連接字符串 { strData.Append("#$%"); } if (n > 0)//從第二個(gè)字段開始,加上字段的連接字符串 { strData.Append("^&*"); } strData.Append(Convert.ToString(row[n]));//取數(shù)據(jù) } } } return strData.ToString(); } 然后在服務(wù)器端: 把string轉(zhuǎn)換成DataSet進(jìn)行操作 /// <summary> /// 解析成DataSet /// </summary> /// <param name="vsData">數(shù)據(jù)字符串</param> /// <param name="dsClone">克隆的原來DataSet的結(jié)構(gòu),沒有數(shù)據(jù)</param> /// <returns></returns> private DataSet StringToDataSet(string vsData,DataSet dsClone) { string[] strTable = { "!@&" };//分解表的連接字符串 string[] strRow = { "#$%" };//分解行的連接字符串 string[] strColumn = { "^&*" };//分解字段的連接字符串 string[] vsTables = vsData.Split(strTable, StringSplitOptions.None);//解析成表的字符串?dāng)?shù)據(jù) for(int tableIndex = 0 ;tableIndex < vsTables.Length;tableIndex ++)//表的字符串?dāng)?shù)組遍歷 { string vsTable = vsTables[tableIndex];//取表的字符串 string[] vsRows = vsTable.Split(strRow, StringSplitOptions.None);//解析成行的字符串?dāng)?shù)組 for (int rowIndex = 0; rowIndex < vsRows.Length; rowIndex++)//行的字符串?dāng)?shù)組遍歷 { DataRow rowNew = ds.Tables[tableIndex].NewRow();//表ds.Tables[tableIndex]新增行 string vsRow = vsRows[rowIndex];//取行的字符串 string[] vsColumns = vsRow.Split(strColumn, StringSplitOptions.None);//解析成字段數(shù)組 for (int columnIndex = 0; columnIndex < vsColumns.Length; columnIndex++)//字段的字符串?dāng)?shù)組遍歷 { rowNew[columnIndex] = vsColumns[columnIndex];// 給每個(gè)字段賦值 } ds.Tables[tableIndex].Rows.Add(vsRows); } } return ds; } | 
|  |