Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 存储过程返回意外值,但工作正常_Asp.net_Sql_C# 4.0_Ado.net_C# 3.0 - Fatal编程技术网

Asp.net 存储过程返回意外值,但工作正常

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

我的项目很好,但很奇怪。我编写了一个存储过程,该过程插入记录,若记录不存在,则插入并返回1,否则返回0 在asp.net.cs代码中,我设置了一个条件,如果结果返回1,则返回true,否则返回false,这样做很好,但实际上SP并没有返回1,它在两种条件下都返回0,但程序在1和0条件下都可以正常工作,为什么?我不明白

SP:

.BLL

.网络服务

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);