以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如果获取储存过程的单个返回字符值?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=185430)

--  作者:happyft
--  发布时间:2023/2/22 14:32:00
--  如果获取储存过程的单个返回字符值?
 \'生成表单自动编号
    Dim tbname As String = "采购单"
    Dim cmd As New SQLCommand
    cmd.ConnectionName = Mydata
    cmd.CommandText = "usp_tbautoID"
    cmd.StoredProcedure = True
    cmd.Parameters.Add("@bh", "0", False) \'这是参数想获取存储过程的返回字符型的值要填写1还是空
    cmd.Parameters.Add("@tbname", tbname) \'第二个参数指定输入参数
    Dim bh As String = Cmd.Parameters("@bh") \'取得存储过程的返回值
    \'cmd.ExecuteNonQuery

    MessageBox.Show(bh)

sql的储存过程中用了output参数,上面想返回字符型的单个值总是出错,应该如何写才可以,上面的写法返回数值没问题

谢谢!

--  作者:有点蓝
--  发布时间:2023/2/22 14:51:00
--  

    cmd.Parameters.Add("@tbname", tbname) \'第二个参数指定输入参数
cmd.ExecuteNonQuery
    Dim bh As String = Cmd.Parameters("@bh") \'取得存储过程的返回值

--  作者:HappyFt
--  发布时间:2023/2/22 15:00:00
--  
那样也是会出错,显示 
String[0]: Size 属性具有无效大小值 0。

cmd.Parameters.Add("@bh", "", False) \'这是参数想获取存储过程的返回字符型的值要填写1还是空
返回字符时上面这名中间是写0,1还是空都不对


--  作者:有点蓝
--  发布时间:2023/2/22 15:13:00
--  
存储过程怎么定义的
--  作者:HappyFt
--  发布时间:2023/2/22 15:17:00
--  
--表单自动编号(不能回收编号)(无编号明细及记录表)
ALTER PROCEDURE [dbo].[usp_tbautoID]
    (
      @tbname NVARCHAR(16) ,
      @bh NVARCHAR(16) OUTPUT
    )
AS
    BEGIN

            ----  --生成编号的过程略 ---- 
              
                --格式化后输出编号
                SELECT  @sx = RIGHT(@num + CAST(@Key AS VARCHAR), LEN(@num)); --23-->023
                SELECT  @bh = REPLACE(@pf, @num, @sx); --1806-000-->1806-023 

            END;


--  作者:有点蓝
--  发布时间:2023/2/22 15:29:00
--  
认真理解一下帮助:http://www.foxtable.com/webhelp/topics/3267.htm

    cmd.StoredProcedure = True
    cmd.Parameters.Add("@tbname", tbname) \'第二个参数指定输入参数
    cmd.Parameters.Add("@bh", "", True) \'这是参数想获取存储过程的返回字符型的值要填写1还是空
    cmd.ExecuteNonQuery
    Dim bh As String = Cmd.Parameters("@bh") \'取得存储过程的返回值