Asp.net 存储过程返回意外值,但工作正常
我的项目很好,但很奇怪。我编写了一个存储过程,该过程插入记录,若记录不存在,则插入并返回1,否则返回0 在asp.net.cs代码中,我设置了一个条件,如果结果返回1,则返回true,否则返回false,这样做很好,但实际上SP并没有返回1,它在两种条件下都返回0,但程序在1和0条件下都可以正常工作,为什么?我不明白 SP: .BLL .网络服务Asp.net 存储过程返回意外值,但工作正常,asp.net,sql,c#-4.0,ado.net,c#-3.0,Asp.net,Sql,C# 4.0,Ado.net,C# 3.0,我的项目很好,但很奇怪。我编写了一个存储过程,该过程插入记录,若记录不存在,则插入并返回1,否则返回0 在asp.net.cs代码中,我设置了一个条件,如果结果返回1,则返回true,否则返回false,这样做很好,但实际上SP并没有返回1,它在两种条件下都返回0,但程序在1和0条件下都可以正常工作,为什么?我不明白 SP: .BLL .网络服务 public class GPSWebservice : System.Web.Services.WebService { public G
public class GPSWebservice : System.Web.Services.WebService {
public GPSWebservice () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public bool insertCoordinates(string[] parts)
{
BLL bll = new BLL();
return bll.InsertCoordinates(parts);
}
}
.default.cs
protected void btnInsertCoordinates_Click(object sender, EventArgs e)
{
GPSWebservice gpsws = new GPSWebservice();
string[] parts = "2013-03-31,ALFALAH-8000,2013-03-31,1099,9888, 0".Split(',');
Response.Write( gpsws.insertCoordinates(parts));
}
我将断点放在result=convert.toint32(sqlCom.executenonquery())上,我尝试了ExecuteScalar(),但遇到了相同的问题。问题就在这里
result = Convert.ToInt32(sqlCom.ExecuteNonQuery());
一定是
sqlCom.ExecuteNonQuery();
result = sqlCom.Parameters["@result"].Value;
或者,在你的情况下
result = sqlParam.Value;
输出参数不是返回值
您可以根据需要更改上述代码
SqlParameter sqlParam = new SqlParameter("@result", SqlDbType.Int);
sqlParam.Direction = ParameterDirection.Output;
sqlCom.Parameters.Add(sqlParam);
更具可读性。但为什么我的代码在0,1条件下工作,即使返回的值不是0,1。。只有0,你是什么意思?SP按原样初始化
@result
。我的意思是当记录存在时。cs代码应返回false,该值基于0,如果记录不存在,则返回true,这取决于SP返回的值,但如果SP始终返回0,那么.cs中的if-else如何工作?为什么您认为SP总是返回0?当我调试它时,结果是在任何情况下都存储0
result = sqlParam.Value;
SqlParameter sqlParam = new SqlParameter("@result", SqlDbType.Int);
sqlParam.Direction = ParameterDirection.Output;
sqlCom.Parameters.Add(sqlParam);