我的数据库是这样写得:
CREATE PROCEDURE PRO_AutoLSH      ---自动生成单号的存储过程
(
    @BX            varchar(10),    --首字母,可以多个字母
    @单号          varchar(20),    --表中的流水号列名,最好是主键
    @维护报修表    varchar(20)     --表名
)
AS
begin
    DECLARE @LSHID  NVARCHAR(20)
    DECLARE @TLSH   VARCHAR(20)
    DECLARE @NUM    INT
    DECLARE @sql    NVARCHAR(200)
    
    ----查询该表最大的流水号
    SET @sql='SELECT ISNULL(MAX(CONVERT(INT,SUBSTRING('+@单号+',8,4))),0)+1 FROM '+@维护报修表
    --创建临时表
    CREATE TABLE TEMP1(TOTAL INT);
    --写入查询得到的数据
    INSERT INTO TEMP1 EXEC(@sql);
    --再查询出值
    SET @NUM=(SELECT TOTAL FROM TEMP1)
    DROP TABLE TEMP1
    
    --拼接下一个流水号:BX+年份4位+月份2位+4位编号(如J2010120001)
    SET @TLSH=@BX+SUBSTRING(CONVERT(VARCHAR(100),GETDATE(),112),1,6)+SUBSTRING(CONVERT(CHAR(5),10000+@NUM),2,4)
    SET @sql=''    
    SET @sql='SELECT @LSH='+''''+@TLSH+''''+' FROM '+@维护报修表
    
    EXEC sp_executesql
            @sql,
            N'@LSH NVARCHAR(20) OUTPUT',
            @LSHID OUTPUT
    SELECT @LSHID
end目的是自动生成流水号的单号
我在vs中设计是这样的单号对应的textbox1是只读模式,我想设计一个一打开这个界面textbox1就调用sql中的存储过程自动生成单号,我参考了网上:
执行一个没有参数的存储过程的代码,写了一下: 
SqlConnection conn=new SqlConnection(“connectionString”); 
SqlDataAdapter da = new SqlDataAdapter(); 
da.selectCommand = new SqlCommand(); 
da.selectCommand.Connection = conn; 
da.selectCommand.CommandText = "PRO_AutoLSH"; 
da.selectCommand.CommandType = CommandType.StoredProcedure;
可是依然无法实现textbox1自动生成单号,求大神帮忙解决!~~谢谢!~~SQL存储过程无参数调用

解决方案 »

  1.   

    用IDataParameter取出来呀,direction为ParameterDirection.Output。
      

  2.   

    @单号 varchar(20) output申明一个与这个@单号对应的参数对象,direction为ParameterDirection.Output,假定为parm然后在执行存储过程的函数后 设置textbox.Text=parm.Value.ToString()
      

  3.   


              SqlParameter outputparm = new SqlParameter("@单号",SqlDbType.VarChar,64);
              outputparm.Direction = ParameterDirection.IntPutOutput;
              commandpbx.Parameters.Add(outputparm);CREATE PROCEDURE PRO_AutoLSH      ---自动生成单号的存储过程
    (
        @BX            varchar(10),    --首字母,可以多个字母
        @单号          varchar(20) output,    --表中的流水号列名,最好是主键
        @维护报修表    varchar(20)     --表名
    )
      

  4.   

    你这个不是无参数存储过程,有三个参数
     @BX            varchar(10),    --首字母,可以多个字母
        @单号          varchar(20),    --表中的流水号列名,最好是主键
        @维护报修表    varchar(20)     --表名
    另外,调用存储过程的话,可以试一下:
    SqlParameter BX_Parameter = new SqlParameter("@letter", SqlDbType.VarChar, 10);
                BX_Parameter.Value = "BX";
                da.SelectCommand.Parameters.Add(BX_Parameter);
                SqlParameter DH_Parameter = new SqlParameter("@LSHkey", SqlDbType.VarChar, 20);          
                DH_Parameter.Value = "单号";
                da.SelectCommand.Parameters.Add(DH_Parameter);
                SqlParameter WH_Parameter = new SqlParameter("@tablename", SqlDbType.VarChar, 20);
                WH_Parameter.Value = "维护报修表";
                da.SelectCommand.Parameters.Add(WH_Parameter);
                
                try
                {
                    da.Fill(dataset, "zidongLSH");
                    
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message);
                    //return String.Empty;
                }            string str = "select MAX(单号) FROM 维护报修表";
                SqlCommand cmd = new SqlCommand(str, conn);
                textBox1.Text=(string) cmd.ExecuteScalar();    
      

  5.   

    @letter、@LSHkey、@tablename是我的@BX            varchar(10),    --首字母,可以多个字母
        @单号          varchar(20),    --表中的流水号列名,最好是主键
        @维护报修表    varchar(20) 对吗?
    "zidongLSH"是什么?
      

  6.   

    是的,"zidongLSH"是你的PRO_AutoLSH