使用ADO .NET调用SQL函数

GVi*_*i82 2 sql vb.net ado.net stored-procedures function

我想在SQL Server中创建调用函数,它接收两个参数并返回一个整数.当我调用存储过程时,我使用以下代码:

    sqlcmd.CommandType = CommandType.StoredProcedure
    sqlcmd.CommandText = "PROCEDURE_NAME"

    sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param1", Utilities.NothingToDBNull(user)))
    sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param2", Utilities.NothingToDBNull(password)))
    da = New SqlClient.SqlDataAdapter()
    da.SelectCommand = sqlcmd
    table = New DataTable()
    da.Fill(table)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我有一个由存储过程返回的表.如果我想使用一个返回标量值而不是存储过程的函数会发生什么变化?

Joh*_*Woo 5

您不能直接,仅StoredProcedure,Text(查询)和TableDirect允许调用该函数.由于您已经暴露了存储过程,为什么不创建一个具有该功能的过程?

在C#代码中,您可以使用ExecuteScalar命令对象的代码

sqlcmd.CommandType = CommandType.StoredProcedure
sqlcmd.CommandText = "PROCEDURE_NAME"
sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param1", Utilities.NothingToDBNull(user)))
sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@param2", Utilities.NothingToDBNull(password)))

Dim obj as Object = sqlcmd.ExecuteScalar() 
' obj hold now the value from the stored procedure.
Run Code Online (Sandbox Code Playgroud)

您的存储过程现在应该如下所示,

CREATE PROCEDURE PROCEDURE_NAME
    @param1 VARCHAR(15),
    @param2 VARCHAR(15)
AS
BEGIN
    SELECT function_name(@param1, @param2)
    FROM...
    WHERE....
END
Run Code Online (Sandbox Code Playgroud)