Web服务方法返回错误:“;“在生成XML文档时出现错误”;
本文关键字:错误 文档 XML 在生成 方法 服务 返回 Web | 更新日期: 2023-09-27 18:00:26
在我的应用程序中,我使用了使用web服务的三层架构。我想在数据库中插入一个数据。当从Web服务调用insert方法时,它会给出一个错误:"生成xml文档时出错
.CS保存点击事件
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()));
}
}
类别(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);
}
Web服务方法〔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();
}
}
当我调试save_click事件时,光标转到catch语句。。。。因为错误来自web服务。如果我只是在Emp.cs中添加InsUpdDel()方法,并在Insert()中调用该方法,那么错误就不会出现
如果我写下面的代码,那么它给出的错误
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[7] = new Service.SqlParameter();
param[7].ParameterName = "@DOB";
param[7].Value = DOB;
param[7].SqlDbType = Service.SqlDbType.DateTime;
更改此行:
param[7].Value = DBNull.Value;
至
param[7].Value = null;
然后在ws方面:
foreach (SqlParameter param in p)
{
if (param.Value == null)
{
param.Value = DBNull.Value;
}
cmd.Parameters.Add(param);
}