Vb.net 函数不返回 SQL Server 存储过程结果

Vb.net function not returning the SQL Server stored procedure result

提问人:Ann 提问时间:7/30/2020 最后编辑:GSergAnn 更新时间:7/30/2020 访问量:237

问:

我有一个存储过程,它根据传入的参数从表中获取数据:

SELECT * 
FROM [dbo].Table1 
WHERE Column1 = @Param1 AND Column2 = @Param2

现在,我使用以下代码通过 VB.Net 函数调用 SQL Server 存储过程:

Public Function GetSPValues(ByVal Param1 As Integer,
                            ByVal Param2 As String) As DataTable
    Dim sqlCon As SqlConnection
    Dim dt As DataTable = New DataTable()
    sqlCon = strCon

    Using (sqlCon)
        Dim cmd As New SqlCommand
        cmd.Connection = sqlCon
        cmd.CommandText = "GetSP"
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@Param1", Param1)
        cmd.Parameters.AddWithValue("@Param2", Param2)
        sqlCon.Open()

        Dim reader As SqlDataReader = cmd.ExecuteReader()
        dt.TableName = "SPValuesTable"
        dt.Load(reader)
        Return dt
   End Using
End Function

问题是,当我尝试在 SQL Server Management Studio 中执行存储过程时,它工作正常并返回我需要的所有数据。

但是当我尝试从 VB.NET 调用时,它根本没有返回任何内容。

我不确定我传递的参数是否真的是存储过程。你能帮我吗?

更新:这是我的整个SP:

ALTER PROCEDURE [dbo].[GetSP]
    @Param1 int = null,
    @Param2 nvarchar(50) = null 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * FROM dbo.tbl1 WHERE Column1 = @Param1 AND Column2 
    = @Param2 
END
SQL 服务器 vb.net aspxGridView

评论

2赞 marc_s 7/30/2020
您应该查看 Can we stop use AddWithValue() already ?并停止使用 - 它可能会导致意想不到和令人惊讶的结果.......AddWithValue()
0赞 marc_s 7/30/2020
此外,查看整个存储过程会很有帮助 - 包括它的“签名”(标头,带有参数定义)
0赞 Ann 7/30/2020
我用AddWithValue()做了更改,但仍然是一样的。只想补充一点,这个 vb.function 在 Web 服务中,我通过客户端 ASP.Net GridView 调用
2赞 Jimi 7/31/2020
既然是字符串,这怎么说呢?使用我之前发布的代码。既然你在那里,请转到 Visual Studio 并永久设置。之后,您将能够当场解决很多问题。sqlConsqlCon = strConOptions -> Project and Solutions -> VB defaultOption Strict On
1赞 Caius Jard 7/31/2020
当它用于存储过程时,我们是否可以停止谈论“我们是否可以停止使用 AddWithValue”,就像这是他们现在必须解决的最重要的事情一样?对于查询中的参数,当然。但是对于sprocs..

答: 暂无答案