2010-11-27 4 views
1

J'ai procédure stockée commeprocédure stockée SQL problème dans 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 

& pour obtenir le paremeter d'état dans ma fonction je suis fonction à l'aide

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

     } 
    } 

problème est que je ne reçois pas la status (paramètre de sortie) dans ma fonction,

Comment puis-je accéder au paramètre d'état dans ma fonction définie dans ma procédure stockée.

Merci

Répondre

5

Vous devez accéder à ce paramètre de sortie après que vous avez appelé votre procédure stockée:

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

vous retournez @@status de la procédure stockée, de sorte que vous pouvez utiliser ExecuteScalar au lieu de ExecuteNonQuery pour retourner le statut

+0

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

+0

OK, mais c'est ne contribue pas vraiment à comprendre comment lire o ut la valeur du paramètre '@ Status' ..... –