解决WebService[WebMethod]方法返回一个SqlDataReader出错问题

WebService方法的返回值必须是可序列化的,因为sqlDataReader对象是不可系列化的,所以返回它会出错,现在是你又不想动用DataSet,所以你可以将返回值保存在一个数组当中返回。

WebService服务端

private sqlDataReader GetUserReader(string sUserID)
        {
            string ssql = "SELECT GUID,Name,Password,Birthday,Email,Mobile,Address,UserType FROM [User] WHERE GUID=@GUID";

            sqlConnection cn = GetopenedConnection();
            cmdGetUser = new sqlCommand(ssql,cn);
            cmdGetUser.Parameters.AddWithValue("@GUID",sUserID);
            sqlDataReader reader = cmdGetUser.ExecuteReader();

            return reader;
        }

这个方法外部看不到,相当于过程函数,返回一个sqlDataReader,供下面这个方法调用

[WebMethod(Description = "获取单个用户")]
        public string[] GetUser(string sUserID)
        {
            sqlDataReader reader = GetUserReader(sUserID);
            string[] sResult = new string[8];

            if (reader.Read())
            {
                sResult[0] = reader["GUID"].ToString();
                sResult[1] = reader["Name"].ToString();
                sResult[2] = reader["Password"].ToString();
                sResult[3] = reader["Birthday"].ToString();
                sResult[4] = reader["Email"].ToString();
                sResult[5] = reader["Mobile"].ToString();
                sResult[6] = reader["Address"].ToString();
                sResult[7] = reader["UserType"].ToString();
            }

            reader.Close();
            return sResult;
        }

Web客户端

现在在客户端页面调用返回用户信息方法。如图:



主要代码
private void BindData()
        {
            if (UserID == "") return;
            string[] sUserData = myService.GetUser(ViewState["UserID"].ToString());
            txtName.Text = sUserData[ 1];
            txtEmail.Text = sUserData[ 4];
            txtMobile.Text = sUserData[ 5];
            txtAddress.Text = sUserData[ 6];
        }

定义一个sUserData数组,实例化一个webservice对象myService,调用GetUser()方法
然后将值赋值给页面上对应的控件。

相关文章

1.使用ajax调用varxhr;functioninvoke(){if(window.ActiveXO...
               好不容易把WebService服务器...
1新建一个工程项目用来做服务端增加一个MyService1类文件pac...
packagecom.transsion.util;importjava.io.BufferedReader;i...
再生产wsdl文件时重写描述文件1usingSystem;2usingSystem.Co...
一般情况下,使用eclipse自带的jax-ws生成webservice会自动生...