2010-11-27 8 views
1

Ich habe Prozedur wiegespeicherte SQL-Prozedur Problem in ASP.NET

CREATE procedure [dbo].[spAddItem] 
(
    @itemId nvarchar(50), 
    @itemName nvarchar(500), 
    @itemDescription nvarchar(500), 
    @itemImage nvarchar(100), 
    @cityId bigint, 
    @Active int, 
    @Status bigint output 
) 
as 
begin tran 
    declare @count as int 
    declare @result as int 
    Set NOCOUNT ON 

    select @count = Count(*) from Item where itemName = @itemName and itemId = @itemId 

    if(@count > 0) 
      begin 
       set @result = -1; 
      end 
    else 
     begin 
       insert into Item(itemId,itemName,itemDescription,itemImage,cityId,Active) 
       values (@itemId,@itemName,@itemDescription,@itemImage,@cityId,@Active) 
       set @result = 0 
     end 

     if @@error=0 
      begin 
      commit tran 
      select @[email protected] 
      return @Status 
      end 
     else 
      begin 
      rollback tran 
      select @[email protected] 
      return @Status  
      end 

commit tran 
gespeichert

& den Status paremeter in meiner Funktion bekomme ich bin mit Funktion

public void DALInsertItem(ItemBLL it) 
    { 
     int rowNo; 
     using (SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"])) 
     { 
      try 
      { 
       SqlParameter[] par = new SqlParameter[7]; 

       par[0] = new SqlParameter("@itemId",it.itemId); 
       par[1] = new SqlParameter("@itemName",it.itemName); 
       par[2] = new SqlParameter("@itemDescription", it.itemDescription); 
       par[3] = new SqlParameter("@itemImage", it.itemImage); 
       par[4] = new SqlParameter("@cityId",it.cityId); 
       par[5] = new SqlParameter("@Active", it.itemActive); 
       par[6] = new SqlParameter("@Status", 100); 
       par[6].Direction = ParameterDirection.Output; 

       rowNo = SqlHelper.ExecuteNonQuery(con, CommandType.StoredProcedure, "spAddItem", par); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
      finally 
      { 
       con.Close(); 
      } 

      if (rowNo == -1) 
      { 
       it.isExistItem = false; 
      } 
      else 
      { 
       it.isExistItem = true; 
      } 

     } 
    } 

Problem ist, ich bin nicht das bekommen Status (Ausgangsparameter) in meiner Funktion,

Wie kann ich auf den Statusparameter in meiner Funktion zugreifen, die in meiner gespeicherten Prozedur festgelegt ist.

Dank

Antwort

5

Sie müssen diesen Ausgangsparameter zugreifen können, nachdem Sie Ihre gespeicherte Prozedur aufgerufen haben:

using (SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"])) 
{ 
    try 
    { 
     SqlParameter[] par = new SqlParameter[7]; 

     par[0] = new SqlParameter("@itemId",it.itemId); 
     par[1] = new SqlParameter("@itemName",it.itemName); 
     par[2] = new SqlParameter("@itemDescription", it.itemDescription); 
     par[3] = new SqlParameter("@itemImage", it.itemImage); 
     par[4] = new SqlParameter("@cityId",it.cityId); 
     par[5] = new SqlParameter("@Active", it.itemActive); 
     par[6] = new SqlParameter("@Status", 100); 
     par[6].Direction = ParameterDirection.Output; 

     rowNo = SqlHelper.ExecuteNonQuery(con, CommandType.StoredProcedure, "spAddItem", par); 

     int returnStatus = (int)par[6].Value; 
    } 
1

Sie @@status aus der gespeicherten Prozedur zurückkehren, so dass Sie ExecuteScalar statt ExecuteNonQuery zurückzukehren, um den Status

+0

http://www.webmaster-talk.com/net-programming-forum/41602-executescalar-vs-executenonquery.html – Dal

+0

OK, aber das ist nicht wirklich helfen zu verstehen, wie o zu lesen ut der Wert des Parameters "@ Status" ..... –