Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 带有Using语句的Sqldatareader是否会返回输出参数?_.net_Vb.net_Parameters_Sqldatareader_Using Statement - Fatal编程技术网

.net 带有Using语句的Sqldatareader是否会返回输出参数?

.net 带有Using语句的Sqldatareader是否会返回输出参数?,.net,vb.net,parameters,sqldatareader,using-statement,.net,Vb.net,Parameters,Sqldatareader,Using Statement,下面是一个较大函数的简单代码片段作为示例 Using conn as New SqlConnection("conn string") Using find as new SqlCommand("ExampleProc",conn) Dim rParam as new SqlParameter("@RESULT",SqlDbType.Int) rParam.Direction = ParameterDirection.Output find

下面是一个较大函数的简单代码片段作为示例

Using conn as New SqlConnection("conn string")
    Using find as new SqlCommand("ExampleProc",conn)
        Dim rParam as new SqlParameter("@RESULT",SqlDbType.Int)
        rParam.Direction = ParameterDirection.Output
        find.Pareameters.Add(rParam)

        Using f as SqlDataReader = find.ExecuteReader
              'Do stuff with datareader
        End Using

        updateResult.Success = Convert.ToBoolean(find.Parameters("@RESULT").Value)
    End Using
  End Using
我知道输出参数是在SqlDataReader关闭后返回的。据我所知,Using语句将在SqlDataReader上调用
.Dispose
,那么这基本上会消除输出参数吗?如果是这样,调用还包含正确关闭和处理所有内容的输出参数的SqlDataReader的最佳方法是什么?在我的搜索中,我在网上找不到任何具体的信息或例子。谢谢


让我根据我读到的内容补充一下,在调用后,您只能使用SqlDataReader访问输出参数。关闭SqlDataReader。

您实际上只需要输出参数中返回的值


您可以使用块将值复制到在
之外声明的变量,并在访问该变量后立即返回该值,或直接返回该值。

我不确定是否理解您想要实现的目标,但这似乎是一种更好的方法

    updateResult.Success = False

    Using f as SqlDataReader = find.ExecuteReader
          'Do stuff with datareader
          updateResult.Success = Convert.ToBoolean(find.Parameters("@RESULT").Value)
    End Using

您可以使用
语句读取
中的结果,如果有任何结果失败,您可以将其预设为false…

处理读取器应该只影响该对象(以及它所拥有的任何对象或资源)。我认为它不应该从命令中删除任何内容。我认为您的示例不起作用,因为必须先关闭SqlDataReader,然后才能访问输出参数?您是否先在Using语句中关闭它?为什么必须先关闭读卡器?我不使用sql Server,但其他数据库(如oracle)从未有过这样的限制…请查看这篇博文,以获得良好的解释:我理解。。。这与Oracle不同-在那里,您可以返回一个游标并使用它。。。这只是意味着在读取输出参数之前,您需要读取所有记录(例如,使用中的while循环)。。。上面的方法仍然有效……这正是我检索Using块中的记录所做的。但不确定输出参数是否可用。希望今天根据我读到的内容进行一些测试,您只有在调用时才能访问该值。关闭sqldatareader。那么,在上面的示例中,它是否会首先返回以供使用?我知道如何引用和使用函数其余部分中的值。@NinjaBomb-来自文章:“我发现在检索输出参数之前必须完全处理整个记录集,否则,输出参数将为空。”-这意味着需要首先读取所有记录,而不是
.Close()
需要调用。文章结尾的简短复制粘贴摘要:-确保首先通过cmd.ExecuteReader()以SqlDataReader的身份检索记录集-处理所有记录集,然后-在尝试检索输出参数之前,请确保通过reader.CLOSE()关闭记录集或SqlDataReader。