我传参执行之后他返回的值为什么是0呢 CREATE  procedure Pro_InsertAdmin
       @Aname      nchar(20),
       @Apwd       nchar(20)
As
    Begin  tran
   if not exists(select * from Admin where Aname =@Aname)
     begin
     insert into Admin
         values(@Aname,@Apwd,0,0,0,0)
     end
  rollback
return @@error
 public static int InsertAdmin(Admininfo a)
        {
            try
            {
                Database db = new Database();
                SqlParameter[] prams = {
                                         new SqlParameter("@Aname",SqlDbType.NChar,20),
                                         new SqlParameter("@Apwd",SqlDbType.NChar,20),
   };                prams[0].Value = a.Aname;
                prams[1].Value = a.Apwd;
                return (db.RunProc("Pro_InsertAdmin", prams));
            }
            catch (SqlException e)
            { throw new Exception(e.Message, e); }
        }
-----------------------------------------------------------------------------------------
/// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procName">存储过程名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <returns>返回存储过程返回值</returns>
        public int RunProc(string procName, SqlParameter[] prams)
        {
            SqlCommand cmd = CreateCommand(procName, prams);
            cmd.ExecuteNonQuery();
            this.Close();
            return (int)cmd.Parameters["ReturnValue"].Value;
        }
★ぉ旋あ律い(281300810) 10:52:36
private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
        {
            // 确认打开连接
            Open();
            SqlCommand cmd = new SqlCommand(procName, con);
            cmd.CommandType = CommandType.StoredProcedure;            // 依次把参数传入存储过程
            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                    cmd.Parameters.Add(parameter);
            }            // 加入返回参数
            cmd.Parameters.Add(
                new SqlParameter("ReturnValue", SqlDbType.Int, 4,
                ParameterDirection.ReturnValue, false, 0, 0,
                string.Empty, DataRowVersion.Default, null));            return cmd;
        }

解决方案 »

  1.   

    CREATE  procedure Pro_InsertAdmin
          @Aname      nchar(20),
          @Apwd      nchar(20)
    As
        Begin  tran
      if not exists(select * from Admin where Aname =@Aname)
        begin
        insert into Admin
            values(@Aname,@Apwd,0,0,0,0)
        end
      rollback
    return @@error
    你这不管有没有错,都回滚了,判断下,出错了就回滚!
      

  2.   


    CREATE  procedure Pro_InsertAdmin 
          @Aname      nchar(20), 
          @Apwd      nchar(20) 
    As 
    begin try
       begin tran
          if not exists(select * from Admin where Aname =@Aname) 
          begin 
            insert into Admin 
            values(@Aname,@Apwd,0,0,0,0) 
          end 
       commit tran
    end try
    begin catch
    rollback tran
            return @@error 
    end catch这样试试呢
      

  3.   

    CREATE  procedure Pro_InsertUser 
          @Aname      nvarchar(50), 
          @Apwd      nvarchar(50)
    As 
        Begin  tran 
      if not exists(select * from UserLogon where UserName =@Aname) 
        begin 
        insert into UserLogon
            values(@Aname,@Apwd) 
        end
    commit tran--add this 
    --  rollback 

    return @@error 
      

  4.   

    哈哈,还是慢了,支持三楼的,写得很标准。楼主的sql语句,首先有begin tran 就要有commit tran, 否则会出错;其次你的rollback不要放在那个位置,因为你会把程序自动回滚。请注意我回帖的红字部分。
      

  5.   

    erik0930 你写的那个存储过程都不能执行啊
      

  6.   

    你返回的 是@@error , 0代表语句执行成功
      

  7.   

    CREATE  procedure Pro_InsertAdmin 
          @Aname      nchar(20), 
          @Apwd      nchar(20) 
    As 
       begin tran
          if not exists(select * from Admin where Aname =@Aname) 
          begin 
            insert into Admin 
            values(@Aname,@Apwd,0,0,0,0)  
       commit tran
          end
    else
        rollback tran你自己在查询分析器里面试着运行一下
      

  8.   


    你那个他会提示错误ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。