c# - ASP.NET 中的 SQL 存储过程问题

标签 c# asp.net sql windows-server-2008

我有这样的存储过程

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 @Status=@result
           return @Status  
          end  
         else  
          begin  
           rollback tran
           select @Status=@result
           return @Status     
          end

commit tran

& 在我正在使用的函数中获取状态参数

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

        }
    }

问题是我没有在我的函数中获取状态(输出参数),

如何访问存储过程中设置的函数中的状态参数。

谢谢

最佳答案

您需要在调用存储过程后访问该输出参数:

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

关于c# - ASP.NET 中的 SQL 存储过程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291206/

相关文章:

c# - 我在 C# 中收到 Oracle.DataAccess 错误

c# - C# 中的 Regex.match 性能问题

c# - 存储数据库项目先前状态的最佳方式

asp.net - 本地主机上的 jQuery 脚本缓存

c# - 多重编辑上的 MVC 模型绑定(bind)

c# - 在您自己的类上使用 System.* 命名空间是否被视为不良做法?

javascript - 如何在jquery中用slideUp打开一个div

sql - 如何删除 SQL 中的重复项但保留一份副本?

mysql - 配方数据库,按成分搜索

c# - 运行大型 SQL 语句并填充 gridview