我有一个简单的TSQL标量函数,名为TestScalar2,如下所示。。
CREATE FUNCTION TestScalar2
(
@GVStaffID INT = 1
)
RETURNS INT
AS
BEGIN
DECLARE @Val Int
set @Val = 10
IF @GVStaffID = 1
BEGIN
set @Val = 20
END
ELSE
BEGIN
SET @Val = 30
END
RETURN @VAL
END
GO
但是我的vb.net代码没有得到结果,它调用了它,它传递了参数,但我得到了0!。
vb代码如下。。。
cmd1.CommandType = System.Data.CommandType.StoredProcedure
cmd1.CommandText = "TestScalar2"
cmd1.Parameters.AddWithValue("@GVStaffID", GVStaffID)
cmd1.Connection = conn
conn.Open()
returnValue = Convert.ToInt32(cmd1.ExecuteScalar())
MsgBox(GVStaffID)
conn.Close()
MsgBox(returnValue)
非常感谢任何帮助,因为我已经无计可施了!
您不是在调用存储过程。您正在调用一个函数。进行此更改:
cmd1.CommandType = System.Data.CommandType.Text
cmd1.CommandText = "Select TestScalar2(@GVStaffID)"
所以我终于开始工作了。。。我创建了一个存储过程,添加了一个输出参数,并使用了execute non-query cmd!
cmd1.CommandType = System.Data.CommandType.StoredProcedure
cmd1.CommandText = "TestScalar"
cmd1.Parameters.AddWithValue("@GVStaffID", GVStaffID)
cmd1.Parameters.Add("@Val", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
cmd1.Connection = conn
conn.Open()
cmd1.ExecuteNonQuery()
MsgBox(GVStaffID)
returnValue = cmd1.Parameters("@Val").Value
conn.Close()
MsgBox(returnValue)
瞧,它起了作用,但那两个小时我再也回不来了!
使用
select ResultValue=dbo.TestScalar2(@p1)
有必要使用模式名称(dbo.(
最好将值分配给变量