添加新订单 存储过程 
主要是用到number号自动生成功能,
我知道错问题是出在number上,就是不知道在哪里出错?
(存储过程应该没问题的!)---插入客户订单 
CREATE PROCEDURE A_insert 

@Adate varchar(50),
@Ath nvarchar(1000),
@Awhy nvarchar(1000),
@Asl varchar(50),
@Amon varchar(50),
@Aqia varchar(50),
@Atel varchar(50),
@Acw varchar(50),
@Aunum varchar(50),
@Ausern varchar(50),
@Ausere varchar(50),
@Ags varchar(50),
@Adq varchar(50),
@Abm varchar(50),
@Azw varchar(50),
@Azwd varchar(50),
@Afj varchar(50),
@Atd varchar(50),
@Add  Datetime,
@Adm char(20),
@Amail varchar(50)

ASSET NOCOUNT ON --这一个部分还可单独提取到一个存储过程中通过传入“单据标识号”和“单据表名”为参数---找帐套字头号 
DECLARE @IH char(1) 
SELECT @IH ='A'--编号年月部分 
DECLARE @YM char(6) 
SET @YM = CONVERT(char(6),GETDATE(),12) 
--单据字头 
DECLARE @DJHH char(8) 
SET @DJHH = @IH + @YM 
--找编号的基值(方法:用当天的编号到排序取最大的一个。如当前最大编号为0001那么它的基值为1,这样就能得出下个编号为0002) 
DECLARE @MNO INT --当天最大的单据号(数值) 
SET @MNO = 1 
select TOP 1 @MNO = CONVERT(int,RIGHT(number,4))+1 from A where left(number,8) = @DJHH order by number desc 
DECLARE @Anumber char(20) --扩充成4位十进制编号(最大可显示9999) 
IF @MNO < 9999 
IF @MNO < 999 
IF @MNO < 99 
IF @MNO < 9 
SET @Anumber = @DJHH + '000' + CONVERT(char(1),@MNO) 
ELSE 
SET @Anumber = @DJHH + '00' + CONVERT(char(2),@MNO) 
ELSE 
SET @Anumber = @DJHH + '0' + CONVERT(char(3),@MNO) 
ELSE 
SET @Anumber = @DJHH + CONVERT(char(4),@MNO) 
ELSE 
SET @Anumber = @DJHH + '9999' 
----(可提取的部分结束)------------------------------------ 
INSERT INTO A 
(number,A_date,A_th,A_why,A_sl,A_mon,A_qia,A_tel,A_cw,A_unum,A_usern,A_usere,A_gs,A_dq,A_bm,A_zw,A_zwd,A_fj,A_td,A_dd,A_dm,A_mail) 
VALUES 
(@Anumber,@Adate,@Ath,@Awhy,@Asl,@Amon,@Aqia,@Atel,@Acw,@Aunum,@Ausern,@Ausere,@Ags,@Adq,@Abm,@Azw,@Azwd,@Afj,@Atd,@Add,@Adm,@Amail) 
RETURN
GO
DAL层引用/// <summary>
        /// 新增表单申请书
        /// </summary>
        /// <param name="A"></param>
        /// <returns></returns>
        public int Add_A(AModel Aorder)
        {   
            SQLHelper sqlh = new SQLHelper();
            SqlParameter[] PalamList ={
                                         //sqlh.CreateInParam("@id",SqlDbType.Int,4,Aorder.Id),
                                         //sqlh.CreateInParam("@xid", SqlDbType.Int,4,Aorder.Xid),
                                         sqlh.CreateInParam("@Anumber",SqlDbType.Char,20,Aorder.Number),
                                         sqlh.CreateInParam("@Adate",SqlDbType.VarChar,50,Aorder.A_date),
                                         sqlh.CreateInParam("@Ath",SqlDbType.NVarChar,1000,Aorder.A_th),
                                         sqlh.CreateInParam("@Awhy",SqlDbType.NVarChar,1000,Aorder.A_why),
                                         sqlh.CreateInParam("@Asl",SqlDbType.VarChar,50,Aorder.A_sl),
                                         sqlh.CreateInParam("@Amon",SqlDbType.VarChar,500,Aorder.A_mon),
                                         sqlh.CreateInParam("@Aqia",SqlDbType.VarChar,50,Aorder.A_qia),
                                         sqlh.CreateInParam("@Atel",SqlDbType.VarChar,50,Aorder.A_tel),
                                         sqlh.CreateInParam("@Acw",SqlDbType.VarChar,50,Aorder.A_cw),
                                         sqlh.CreateInParam("@Aunum",SqlDbType.VarChar,50,Aorder.A_unum),
                                         sqlh.CreateInParam("@Ausern",SqlDbType.VarChar,50,Aorder.A_usern),
                                         sqlh.CreateInParam("@Ausere",SqlDbType.VarChar,50,Aorder.A_usere),
                                         sqlh.CreateInParam("@Ags",SqlDbType.VarChar,50,Aorder.A_gs),
                                         sqlh.CreateInParam("@Adq",SqlDbType.VarChar,50,Aorder.A_dq),
                                         sqlh.CreateInParam("@Abm",SqlDbType.VarChar,50,Aorder.A_bm),
                                         sqlh.CreateInParam("@Azw",SqlDbType.VarChar,50,Aorder.A_zw),
                                         sqlh.CreateInParam("@Azwd",SqlDbType.VarChar,50,Aorder.A_zwd),
                                         sqlh.CreateInParam("@Afj",SqlDbType.VarChar,50,Aorder.A_fj),
                                         sqlh.CreateInParam("@Atd",SqlDbType.VarChar,50,Aorder.A_td),
                                         sqlh.CreateInParam("@Add",SqlDbType.DateTime,8,Aorder.A_dd),
                                         sqlh.CreateInParam("@Adm",SqlDbType.Char,20,Aorder.A_dm),
                                         sqlh.CreateInParam("@Amail",SqlDbType.VarChar,50,Aorder.A_mail)
                                        };
            try
            {
                return (sqlh.RunProc("A_insert", PalamList));
            }
            catch (Exception ex)
            {
                SystemError.CreateErrorLog(ex.Message);
                throw new Exception(ex.Message, ex);
            }
        }
WEB层代码:protected void Button2_Click(object sender, EventArgs e)
        {
            if (this.txtbox_why.Text == "")
            {
                Response.Write("<script>alert('事由不能为空!');</script>");
            }
            else if (this.txtbox_th.Text == "")
            {
                Response.Write("<script>alert('申请事项不能为空!');</script>");
            }
            else 
            {
                AModel Amodel = new AModel();
                Amodel.A_date = this.YYSimpleCalendar1.Text;
                //Amodel.Number = "A" + Common.StrHelper.GetRamCode();//本来这是另外一种方法,我现在是直接在存储过程里得到number号!!
                Amodel.A_th = this.txtbox_th.Text.Trim();
                Amodel.A_why = this.txtbox_why.Text.Trim();
                Amodel.A_sl = this.txtbox_sl.Text.Trim();
                Amodel.A_mon = this.txtbox_fy.Text.Trim();
                Amodel.A_qia = this.txtbox_qia.Text.Trim();
                Amodel.A_cw = this.txtbox_cw.Text.Trim();
                Amodel.A_tel = this.txtbox_tel.Text.Trim();
                Amodel.A_unum = this.txtbox_gh.Text.Trim();
                Amodel.A_usern = this.txtbox_usern.Text.Trim();
                Amodel.A_usere = this.txtbox_usere.Text.Trim();
                Amodel.A_gs = this.txtbox_gs.Text.Trim();
                Amodel.A_dq = this.txt_dq.Text.Trim();
                Amodel.A_bm = this.txtbox_bm.Text.Trim();
                Amodel.A_zw = this.txtbox_zw.Text.Trim();
                Amodel.A_zwd = this.txtbox_zwd.Text;
                Amodel.A_fj = this.txtbox_tel.Text.Trim();
                Amodel.A_td = this.lab_A_td.Text.Trim();
                Amodel.A_dd = DateTime.Now;
                Amodel.A_dm = "";
                Amodel.A_mail = this.Hidden_mail.Value;
                ABLL abll = new ABLL();
                if (abll.Add_A(Amodel) > 0)
                {
                    Response.Write("<script>alert('添加成功!');location.href='Get_User2.aspx';</script>");
                }
                 else
                {
                    Response.Write("<script>alert('添加失败!');location.href='Get_User2.aspx';</script>");
                }
            }
        }

解决方案 »

  1.   

    sqlh.CreateInParam("@Anumber",SqlDbType.Char,20,Aorder.Number),
    多传了一个参数
      

  2.   

    我试过 
    //sqlh.CreateInParam("@Anumber",SqlDbType.Char,20,Aorder.Number),
    但是number号没取到值为null,
    “添加失败!”
      

  3.   

    --扩充成4位十进制编号(最大可显示9999) 
    IF @MNO < 9999 
    IF @MNO < 999 
    IF @MNO < 99 
    IF @MNO < 9 
    SET @Anumber = @DJHH + '000' + CONVERT(char(1),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + '00' + CONVERT(char(2),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + '0' + CONVERT(char(3),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + CONVERT(char(4),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + '9999' 
    那就把这段代码改一下
      

  4.   

    =======================================================
    --扩充成4位十进制编号(最大可显示9999) 
    IF @MNO < 9999 
    IF @MNO < 999 
    IF @MNO < 99 
    IF @MNO < 9 
    SET @Anumber = @DJHH + '000' + CONVERT(char(1),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + '00' + CONVERT(char(2),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + '0' + CONVERT(char(3),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + CONVERT(char(4),@MNO) 
    ELSE 
    SET @Anumber = @DJHH + '9999' 那就把这段代码改一下
    ========================================================
    好像跟我原来的没变,怎么改?
    我以前也用过这个存储过程的,没问题的!
    只不过是没用3层架构的方式写!