2014-04-02 34 views
0

我的项目工作正常,但很奇怪。我写了一个记录存储过程如果记录已经不存在然后它插入并返回1 else返回0 在asp.net中.cs代码我把一个条件,如果结果返回1然后返回true否则返回false,它这样做,完美但实际上SP不返回1,它在两种情况下都返回0,但对于1和0情况,程序工作正常,为什么?我不明白。存储过程返回意外的值,但工作正常

SP:

ALTER PROCEDURE [dbo].[AddCoordinates] 
    -- Add the parameters for the stored procedure here 

    @AddedDateTime varchar(50), 
    @IMEI varchar(50), 
    @RecordedDateTime varchar(50), 
    @Latitude varchar(50), 
    @Longitude varchar(50), 
    @IsParking bit, 
    @result int output 
AS 
BEGIN 

    --set @result = (select count(*) from dbo.Coordinates where IMEI [email protected]) 

    If Not exists(select IMEI from dbo.Coordinates where IMEI [email protected]) 
    Begin 
    insert into dbo.Coordinates 
    values (@AddedDateTime, @IMEI, @RecordedDateTime, @Latitude, @Longitude, @IsParking) 
    Select @result=1 
    End 
    Else If exists(select IMEI from dbo.Coordinates where IMEI [email protected]) 
    Begin 
    Select @result=0 
    End 

END 

.BLL

public class BLL 
{ 
    String conStr; 
    String query; 
    SqlConnection sqlCon; 
    SqlCommand sqlCom; 

    public BLL() 
    { 

     conStr = WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; 
     query = ""; 
     sqlCon = new SqlConnection(conStr); 
     sqlCom = new SqlCommand(query, sqlCon); 

    } 

    public bool InsertCoordinates(string[] parts) 
    { 

     sqlCom.CommandText = "AddCoordinates"; 
     sqlCom.CommandType = CommandType.StoredProcedure; 
     int result; 

     sqlCom.Parameters.Add("@AddedDateTime", SqlDbType.VarChar).Value = parts[0].ToString(); 
     sqlCom.Parameters.Add("@IMEI", SqlDbType.VarChar).Value = parts[1].ToString(); 
     sqlCom.Parameters.Add("@RecordedDateTime", SqlDbType.VarChar).Value = parts[2].ToString(); 
     sqlCom.Parameters.Add("@Latitude", SqlDbType.VarChar).Value = parts[3].ToString(); ; 
     sqlCom.Parameters.Add("@Longitude", SqlDbType.VarChar).Value = parts[4].ToString(); ; 
     sqlCom.Parameters.Add("@IsParking ", SqlDbType.Bit).Value = ((parts[5].ToString().Trim()).Equals("0")) ? true : false; 
     SqlParameter sqlParam = new SqlParameter("@result", SqlDbType.Int); 
     sqlCom.Parameters.Add(sqlParam); 
     sqlCom.Parameters["@result"].Direction = ParameterDirection.Output; 

     try 
     { 
      sqlCon.Open(); 
      result = Convert.ToInt32(sqlCom.ExecuteNonQuery()); 


     } 
     catch (Exception ex) 
     { 
      throw ex; 

     } 
     finally 
     { 
      sqlCon.Close(); 
     } 

     if(result == 1) 
      return true; 
     else 
      return false; 
    } 
} 

.Webservice

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

我把结果= convert.toint32(sqlCom.executenonquery()),我试着ExecuteScalar()但同样的问题。

回答

1

问题是在这里

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

但为什么我的代码在0,1条件下工作,即使返回的值不是0,1 ..只是0, – user3432348

+0

您的意思是?你的SP按原样初始化'@ result'。 –

+0

我的意思是什么时候记录存在然后.cs代码应该返回假的基于0或真如果记录不存在,这取决于从SP返回值,但如果SP返回0所有的时间,如何如果其他.cs工作? – user3432348