Web服务方法返回的错误:"还有在生成XML文档&QUOT一个错误; [英] Webservice method returns error:"There is an error in generating an XML document"

查看:186
本文介绍了Web服务方法返回的错误:"还有在生成XML文档&QUOT一个错误;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序使用了使用Web服务的三层架构。
我想用在数据库中插入数据。当插入方法是从Web服务把它称为给出了一个错误为这是一个错误生成XML文档

.CS保存单击事件

 保护无效btnSave_Click(对象发件人,EventArgs的发送)
    {
        尝试
        {
             // assinging值对象(objEmp)
            字符串结果= objEmp.Insert();
            如果(结果==1)
            {                Page.ClientScript.RegisterStartupScript(this.GetType(),ShowMessage的String.Format(<脚本类型=文/ JavaScript的'>警报('{0})LT; / SCRIPT>中,记录保存));
                的Response.Redirect(ViewEmployeeDetails.aspx);            }
            其他
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(),ERROR1的String.Format(<脚本类型=文/ JavaScript的'>警报('{0})LT; / SCRIPT>中,结果。取代(',\\\\')));
            }        }
        赶上(异常前)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(),错误的String.Format(<脚本类型=文/ JavaScript的'>警报('{0})LT; / SCRIPT>中,恩。 Message.ToString()));
        }
    }

类(Emp.cs)

 公共字符串插入()
    {
        Service.SqlParameter [] =参数新Service.SqlParameter [13];        参数[0] =新Service.SqlParameter();
        参数[0] .ParameterName =@Dta_Users;
        参数[0] .value的= Dta_Users;
        参数[0] .SqlDbType = Service.SqlDbType.NVarChar;        参数[1] =新Service.SqlParameter();
        参数[1] .ParameterName =@FK_EmployeeTypeID;
        参数[1]。价值= FK_EmployeeTypeID;
        参数[1] .SqlDbType = Service.SqlDbType.Decimal;        参数[2] =新Service.SqlParameter();
        参数[2] .ParameterName =@EmployeeName;
        参数[2]。价值= EmployeeName;
        参数[2] .SqlDbType = Service.SqlDbType.NVarChar;        参数[3] =新Service.SqlParameter();
        参数[3] .ParameterName =@CellNo;
        参数[3]。价值= CellNo;
        参数[3] .SqlDbType = Service.SqlDbType.NVarChar;        参数[4] =新Service.SqlParameter();
        参数[4] .ParameterName =@PhNo;
        参数[4]。价值= PHNO;
        参数[4] .SqlDbType = Service.SqlDbType.NVarChar;        参数[5] =新Service.SqlParameter();
        参数[5] .ParameterName =@address;
        参数[5]。价值=地址;
        参数[5] .SqlDbType = Service.SqlDbType.NVarChar;        参数[6] =新Service.SqlParameter();
        参数[6] .ParameterName =@Email;
        参数[6]。价值=电子邮件;
        参数[6] .SqlDbType = Service.SqlDbType.NVarChar;        参数[7] =新Service.SqlParameter();
        参数[7] .ParameterName =@DOB;
        如果(DOB == NULL)
        {
            参数[7]。价值= DBNull.Value;
        }
        其他
        {
            参数[7]。价值= DOB;
        }
        参数[7] .SqlDbType = Service.SqlDbType.DateTime;        参数[8] =新Service.SqlParameter();
        参数[8] .ParameterName =@DOJ;
        参数[8]。价值= DOJ;
        参数[8] .SqlDbType = Service.SqlDbType.DateTime;        参数[9] =新Service.SqlParameter();
        参数[9] .ParameterName =@DOR;
        参数[9]。价值= DOR;
        参数[9] .SqlDbType = Service.SqlDbType.NVarChar;        参数[10] =新Service.SqlParameter();
        参数[10] .ParameterName =@Status;
        参数[10]。价值=状态;
        参数[10] .SqlDbType = Service.SqlDbType.NVarChar;        参数[11] =新Service.SqlParameter();
        参数[11] .ParameterName =@Remarks;
        参数[11]。价值=备注;
        参数[11] .SqlDbType = Service.SqlDbType.NVarChar;        参数[12] =新Service.SqlParameter();
        参数[12] .ParameterName =@Dta_User;
        参数[12]。价值= Dta_User;
        参数[12] .SqlDbType = Service.SqlDbType.NVarChar;        返回s.InsUpdDel(康涅狄格州,Employee_Insert,参数);
    }

Web服务方法
 [的WebMethod]

 公共字符串InsUpdDel(康涅狄格州字符串,字符串PROCNAME,的SqlParameter [] P)
{
    尝试
    {
        使用(SqlConnection的CN =新的SqlConnection(康涅狄格州))
        {
            如果(cn.State == ConnectionState.Open || cn.State == || ConnectionState.Broken == cn.State || ConnectionState.Connecting == cn.State || ConnectionState.Executing == cn.State ConnectionState.Fetching )
                cn.Close();
            cn.Open();
            CMD的SqlCommand =新的SqlCommand(PROCNAME,CN);            cmd.CommandType = CommandType.StoredProcedure;            的foreach(P中的SqlParameter参数)
            {
                cmd.Parameters.Add(参数);
            }
            SqlDataReader的博士= cmd.ExecuteReader();
            dr.Read();
            如果(DR [0]的ToString()==1)
            {
                回到1;
            }
            其他
            {
                返回博士[0]的ToString();
            }
            //dr.Close();
            cn.Close();
        }
    }
    赶上(异常前)
    {
        回归错误:+ ex.Message.ToString();
    }
}

当我调试save_click事件将光标转到catch语句作为....错误是从Web服务。如果我只需添加InsUpdDel()方法Emp.cs和插入调用此方法()方法则误差不来了。

如果我下面写code,那么它给错误

 参数[7] =新Service.SqlParameter();
        参数[7] .ParameterName =@DOB;
        如果(DOB == NULL)
        {
            参数[7]。价值= DBNull.Value;
        }
        其他
        {
            参数[7]。价值= DOB;
        }
        参数[7] .SqlDbType = Service.SqlDbType.DateTime;

如果我写低于code,那么它不是给错误

 参数[7] =新Service.SqlParameter();
    参数[7] .ParameterName =@DOB;
    参数[7]。价值= DOB;
    参数[7] .SqlDbType = Service.SqlDbType.DateTime;


解决方案

更改此行:

 参数[7]。价值= DBNull.Value;

 参数[7]。价值= NULL;

,然后WS方:

 的foreach(P中的SqlParameter参数)
{
    如果(param.Value == NULL)
    {
           param.Value = DBNull.Value;
    }
    cmd.Parameters.Add(参数);
}

In my application I have used 3-tier architecture using web service. I want o insert a data in the database. When the insert method is called from the webservice it gives an error as "There is an Error in generating an xml document

.CS Save click event

 protected void btnSave_Click(object sender, EventArgs e)
    {
        try
        {
             //assinging values to the Object(objEmp)
            string Result = objEmp.Insert();
            if (Result == "1")
            {

                Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowMessage", string.Format("<script type='text/javascript'>alert('{0}')</script>", "Record Saved"));
                Response.Redirect("ViewEmployeeDetails.aspx");

            }
            else
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Error1", string.Format("<script type='text/javascript'>alert('{0}')</script>", Result.Replace("'", "\\'")));
            }

        }
        catch (Exception ex)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Error", string.Format("<script type='text/javascript'>alert('{0}')</script>", ex.Message.ToString()));
        }
    }

Class(Emp.cs)

public String Insert()
    {
        Service.SqlParameter[] param = new Service.SqlParameter[13];

        param[0] = new Service.SqlParameter();
        param[0].ParameterName = "@Dta_Users";
        param[0].Value = Dta_Users;
        param[0].SqlDbType = Service.SqlDbType.NVarChar;

        param[1] = new Service.SqlParameter();
        param[1].ParameterName = "@FK_EmployeeTypeID";
        param[1].Value = FK_EmployeeTypeID;
        param[1].SqlDbType = Service.SqlDbType.Decimal;

        param[2] = new Service.SqlParameter();
        param[2].ParameterName = "@EmployeeName";
        param[2].Value = EmployeeName;
        param[2].SqlDbType = Service.SqlDbType.NVarChar;

        param[3] = new Service.SqlParameter();
        param[3].ParameterName = "@CellNo";
        param[3].Value = CellNo;
        param[3].SqlDbType = Service.SqlDbType.NVarChar;

        param[4] = new Service.SqlParameter();
        param[4].ParameterName = "@PhNo";
        param[4].Value = PhNo;
        param[4].SqlDbType = Service.SqlDbType.NVarChar;

        param[5] = new Service.SqlParameter();
        param[5].ParameterName = "@Address";
        param[5].Value = Address;
        param[5].SqlDbType = Service.SqlDbType.NVarChar;

        param[6] = new Service.SqlParameter();
        param[6].ParameterName = "@Email";
        param[6].Value = Email;
        param[6].SqlDbType = Service.SqlDbType.NVarChar;

        param[7] = new Service.SqlParameter();
        param[7].ParameterName = "@DOB";
        if (DOB == null)
        {
            param[7].Value = DBNull.Value;
        }
        else
        {
            param[7].Value = DOB;
        }
        param[7].SqlDbType = Service.SqlDbType.DateTime;

        param[8] = new Service.SqlParameter();
        param[8].ParameterName = "@DOJ";
        param[8].Value = DOJ;
        param[8].SqlDbType = Service.SqlDbType.DateTime;

        param[9] = new Service.SqlParameter();
        param[9].ParameterName = "@DOR";
        param[9].Value = DOR;
        param[9].SqlDbType = Service.SqlDbType.NVarChar;

        param[10] = new Service.SqlParameter();
        param[10].ParameterName = "@Status";
        param[10].Value = Status;
        param[10].SqlDbType = Service.SqlDbType.NVarChar;

        param[11] = new Service.SqlParameter();
        param[11].ParameterName = "@Remarks";
        param[11].Value = Remarks;
        param[11].SqlDbType = Service.SqlDbType.NVarChar;

        param[12] = new Service.SqlParameter();
        param[12].ParameterName = "@Dta_User";
        param[12].Value = Dta_User;
        param[12].SqlDbType = Service.SqlDbType.NVarChar;

        return  s.InsUpdDel(Conn, "Employee_Insert", param);


    }

webservice method [WebMethod]

public string InsUpdDel(string Conn, string ProcName, SqlParameter[] p)
{
    try
    {
        using (SqlConnection cn = new SqlConnection(Conn))
        {
            if (cn.State == ConnectionState.Open || cn.State == ConnectionState.Broken || cn.State == ConnectionState.Connecting || cn.State == ConnectionState.Executing || cn.State == ConnectionState.Fetching)
                cn.Close();
            cn.Open();
            SqlCommand cmd = new SqlCommand(ProcName, cn);

            cmd.CommandType = CommandType.StoredProcedure;

            foreach (SqlParameter param in p)
            {
                cmd.Parameters.Add(param);
            }
            SqlDataReader dr = cmd.ExecuteReader();
            dr.Read();
            if (dr[0].ToString() == "1")
            {
                return "1";
            }
            else
            {
                return dr[0].ToString();
            }
            //dr.Close();
            cn.Close();
        }
    }
    catch (Exception ex)
    {
        return "Error : " + ex.Message.ToString();
    }


}

When i debug the save_click event the cursor goes to the catch statement....as the error is from web service. If i simply add InsUpdDel() method in Emp.cs and call this method in Insert() method then error is not coming

If i write below code then its giving error

        param[7] = new Service.SqlParameter();
        param[7].ParameterName = "@DOB";
        if (DOB == null)
        {
            param[7].Value = DBNull.Value;
        }
        else
        {
            param[7].Value = DOB;
        }
        param[7].SqlDbType = Service.SqlDbType.DateTime;

if i write below code then its not giving error

    param[7] = new Service.SqlParameter();
    param[7].ParameterName = "@DOB";
    param[7].Value = DOB;
    param[7].SqlDbType = Service.SqlDbType.DateTime;

解决方案

Change this line:

param[7].Value = DBNull.Value;

to

param[7].Value = null;

And then on ws side:

foreach (SqlParameter param in p)
{
    if (param.Value == null)
    {
           param.Value = DBNull.Value;
    }
    cmd.Parameters.Add(param);
}

这篇关于Web服务方法返回的错误:&QUOT;还有在生成XML文档&QUOT一个错误;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆