Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
VB.NET SqlCommand连接不检索结果,只是偶尔检索_.net_Vb.net_Sql Server 2012_Sqlconnection - Fatal编程技术网

VB.NET SqlCommand连接不检索结果,只是偶尔检索

VB.NET SqlCommand连接不检索结果,只是偶尔检索,.net,vb.net,sql-server-2012,sqlconnection,.net,Vb.net,Sql Server 2012,Sqlconnection,我的代码在从SQL数据库检索结果时遇到了一个奇怪的问题。代码如下,但其基本内容如下: 连接被打开,然后立即执行查询。8/10次这样做没有问题,但有时令人费解的是,get执行的查询将不会返回任何结果,即使它是对相同数据库的完全相同的查询,并且没有被修改。我注意到,如果在连接打开和关闭之间加入threading.sleep函数,这个问题就会完全消失,但显然这并不理想 我试着查询连接的状态,看看它是否准备好了,但它总是报告它是打开的,即使它没有从数据库得到任何结果 有人有什么想法吗 'Runs

我的代码在从SQL数据库检索结果时遇到了一个奇怪的问题。代码如下,但其基本内容如下:

连接被打开,然后立即执行查询。8/10次这样做没有问题,但有时令人费解的是,get执行的查询将不会返回任何结果,即使它是对相同数据库的完全相同的查询,并且没有被修改。我注意到,如果在连接打开和关闭之间加入threading.sleep函数,这个问题就会完全消失,但显然这并不理想

我试着查询连接的状态,看看它是否准备好了,但它总是报告它是打开的,即使它没有从数据库得到任何结果

有人有什么想法吗

    'Runs the passed query and returns each row as an object within an ArrayList
    Function Get_Results(ByVal query As String, ByVal ConnectionStringName As String) As ArrayList
        Dim sqlComm As SqlCommand = Get_Connection(query, ConnectionStringName)

        'Open that connection
        sqlComm.Connection.Open()

        'This part doesn't work because the connection will always report that it's open.
        While sqlComm.Connection.State <> Data.ConnectionState.Open
            Threading.Thread.Sleep(100)
        End While

        'pause and wait for the connection to fully open (maybe?)
        'Threading.Thread.Sleep(100)

        'Execute the query and store all of the results into the SqlDataReader.
        Dim sqlRead As SqlDataReader = sqlComm.ExecuteReader()

        Dim result As ArrayList = New ArrayList

        'Read each row one by one.
        While sqlRead.Read()
            'Create an object of the size needed.
            Dim row(sqlRead.FieldCount - 1) As Object

            'Fill the row object with the values.
            sqlRead.GetValues(row)

            'Add the result object to the array.
            result.Add(row)
        End While

        'Close all open connections to the database.
        sqlRead.Close()
        sqlComm.Connection.Close()

        Return result
    End Function
”运行传递的查询并将每一行作为ArrayList中的对象返回
函数Get_Results(ByVal查询作为字符串,ByVal连接字符串作为字符串)作为ArrayList
Dim sqlComm As SqlCommand=获取连接(查询、连接字符串名称)
“打开那个连接
sqlComm.Connection.Open()
'此部分不工作,因为连接将始终报告它已打开。
而sqlComm.Connection.State Data.ConnectionState.Open
线程。线程。睡眠(100)
结束时
'暂停并等待连接完全打开(可能?)
'线程。线程。睡眠(100)
'执行查询并将所有结果存储到SqlDataReader中。
Dim sqlRead作为SqlDataReader=sqlComm.ExecuteReader()
按ArrayList调整结果=新建ArrayList
“一行一行地读。
而sqlRead.Read()
'创建所需大小的对象。
作为对象的Dim行(sqlRead.FieldCount-1)
'用值填充行对象。
sqlRead.GetValues(行)
'将结果对象添加到数组中。
结果。添加(行)
结束时
'关闭所有打开的数据库连接。
sqlRead.Close()
sqlComm.Connection.Close()
返回结果
端函数

我的查询完全不相关。我可以试着做“选择1作为测试”,但它仍然不起作用。我甚至重写了上面的代码以使用SqlDataSource,但仍然遇到同样的问题。因此,代码可能不是问题,而是数据库问题。通常,您不必等待连接打开,或者更准确地说,
open()
方法不会返回,直到连接真正打开(或者将超时)。您可以通过检查数据库连接的connection state属性来开始调试(例如,
Debug.WriteLine(sqlComm.Connection.State.ToString());
)。将其放在sqlComm.Open()之后-sry我的VB有点生锈。但在尝试其他操作之前,只需检查连接的连接状态。为您发布代码
Get\u connection
方法,因为如果在初始
sqlComm.open()
之后连接未打开,则可能存在服务器/硬件问题