c# windows程序通过WebService传输数据,如果传输的数据是DataSet,把DataSet转换成string进行传输,可以大大降低传输时间!
//客户端 private string DataSetToString(DataSet ds) { //!@&为表的连接字符串,#$%为行的连接字符串,^&*为字段的连接字符串 //为了保证连接字符串不在DataSet数据中存在,连接字符串尽量复杂! StringBuilder strData = new StringBuilder(); foreach (DataTable dt in ds.Tables)//遍历ds的表 { if (strData.Length > 0)//从第一个表开始,加上表的连接字符串 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)//从第二行数据开始,加上行的连接字符串 { strData.Append("#$%"); } if (n > 0)//从第二个字段开始,加上字段的连接字符串 { strData.Append("^&*"); } strData.Append(Convert.ToString(row[n]));//取数据 } } } return strData.ToString(); } 然后在服务器端: 把string转换成DataSet进行操作 /// <summary> /// 解析成DataSet /// </summary> /// <param name="vsData">数据字符串</param> /// <param name="dsClone">克隆的原来DataSet的结构,没有数据</param> /// <returns></returns> private DataSet StringToDataSet(string vsData,DataSet dsClone) { string[] strTable = { "!@&" };//分解表的连接字符串 string[] strRow = { "#$%" };//分解行的连接字符串 string[] strColumn = { "^&*" };//分解字段的连接字符串 string[] vsTables = vsData.Split(strTable, StringSplitOptions.None);//解析成表的字符串数据 for(int tableIndex = 0 ;tableIndex < vsTables.Length;tableIndex ++)//表的字符串数组遍历 { string vsTable = vsTables[tableIndex];//取表的字符串 string[] vsRows = vsTable.Split(strRow, StringSplitOptions.None);//解析成行的字符串数组 for (int rowIndex = 0; rowIndex < vsRows.Length; rowIndex++)//行的字符串数组遍历 { DataRow rowNew = ds.Tables[tableIndex].NewRow();//表ds.Tables[tableIndex]新增行 string vsRow = vsRows[rowIndex];//取行的字符串 string[] vsColumns = vsRow.Split(strColumn, StringSplitOptions.None);//解析成字段数组 for (int columnIndex = 0; columnIndex < vsColumns.Length; columnIndex++)//字段的字符串数组遍历 { rowNew[columnIndex] = vsColumns[columnIndex];// 给每个字段赋值 } ds.Tables[tableIndex].Rows.Add(vsRows); } } return ds; } |
|