龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

C#把DataSet转换成stirng进行传输

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
c# windows程序通过WebService传输数据,如果传输的数据是DataSet,把DataSet转换成string进行传输,可以大大降低传输时间! //客户端 private string DataSetToString( DataSet ds) { //!@ 为表的连接字符串

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;

        }

精彩图集

赞助商链接