Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
Asp.net &引用;当不存在数据时读取的尝试无效”;_Asp.net_Sql Server_Vb.net_Visual Studio - Fatal编程技术网

Asp.net &引用;当不存在数据时读取的尝试无效”;

Asp.net &引用;当不存在数据时读取的尝试无效”;,asp.net,sql-server,vb.net,visual-studio,Asp.net,Sql Server,Vb.net,Visual Studio,ASP.NET不存在数据时读取的尝试无效 第46行出现错误:Dim requestid=dbreader.GetInt32(1) 我的数据库中的那个列有数据,所以我被卡住了 如果需要,可以发布更多代码 Imports System.Data.SqlClient Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.E

ASP.NET不存在数据时读取的尝试无效

第46行出现错误:
Dim requestid=dbreader.GetInt32(1)

我的数据库中的那个列有数据,所以我被卡住了

如果需要,可以发布更多代码

Imports System.Data.SqlClient

Public Class WebForm1
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    writemystuff()
End Sub

Dim conn As New SqlConnection

Sub CloseDatabase()
    conn.Close()
End Sub

Sub ConnectToDatabase()
    conn.ConnectionString = ConfigurationManager.ConnectionStrings("dbSQL").ConnectionString
    conn.Open()
End Sub


Sub writemystuff()

    'Response.Write(SQL1)

    Dim XMLOutput = "<?xml version=""1.0"" encoding=""utf-8"" ?>"
    'XMLOutput = XMLOutput + "<?xml-stylesheet type=""text/xsl"" href=""XMLSchema1.xslt""?>"
    XMLOutput = XMLOutput + "<requests "
    XMLOutput = XMLOutput + " xmlns = ""http://www.w3schools.com"""
    XMLOutput = XMLOutput + " xmlns:xsi = ""http://www.w3.org/2001/XMLSchema-instance"""
    XMLOutput = XMLOutput + " xsi:schemaLocation=""http://www.w3schools.com XMLSchema1.xsd"">"
    ConnectToDatabase()

    Dim choice = Request("requestchoice")
    Dim SQL1 = "select * from request where r_id = 314"
    If choice = "Request 112" Then
        SQL1 = "select * from request where r_id = 112"
    End If

    Dim cmd = New SqlCommand(SQL1, conn)
    Dim dbreader = cmd.ExecuteReader()
    For Each record In dbreader

    Next

    Dim requestid = dbreader.GetInt32(1)
    XMLOutput = XMLOutput + "<vendor"
    XMLOutput = XMLOutput + " v_name=""" & dbreader.GetString(2) & """"
    XMLOutput = XMLOutput + " v_id=""" & dbreader.GetInt32(0) & """"
    XMLOutput = XMLOutput + " r_id=""" & dbreader.GetInt32(1) & """"
    XMLOutput = XMLOutput + " >"
    Dim SQL2 = "select * from product where r_id = " & requestid

    Dim cmd2 = New SqlCommand(SQL2, conn)

    Dim dbreader2 = cmd2.ExecuteReader()
    For Each record2 In dbreader2
        XMLOutput = XMLOutput + "<product"
        XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
        XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
        XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
        XMLOutput = XMLOutput + " >"

    Next
    dbreader2.Close()
    XMLOutput = XMLOutput + "</request>"

    CloseDatabase()
    XMLOutput = XMLOutput + "</requests>"
    Response.Write(XMLOutput)
End Sub
End Class
导入System.Data.SqlClient
公共类WebForm1
继承System.Web.UI.Page
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
writemystuff()
端接头
Dim conn作为新的SqlConnection
子数据库()
康涅狄格州关闭
端接头
子连接数据库()
conn.ConnectionString=ConfigurationManager.ConnectionString(“dbSQL”).ConnectionString
康涅狄格州公开赛
端接头
子写入系统uff()
'Response.Write(SQL1)
Dim XMLOutput=“”
'XMLOutput=XMLOutput+“”
XMLOutput=XMLOutput+“”
ConnectToDatabase()
Dim choice=请求(“请求选择”)
Dim SQL1=“从请求中选择*,其中r\u id=314”
如果选择=“请求112”,则
SQL1=“从请求中选择*,其中r\u id=112”
如果结束
Dim cmd=新的SqlCommand(SQL1,conn)
Dim dbreader=cmd.ExecuteReader()
对于dbreader中的每条记录
下一个
Dim requestid=dbreader.GetInt32(1)
XMLOutput=XMLOutput+“”
Dim SQL2=“从产品中选择*,其中r\u id=“&requestid
Dim cmd2=新的SqlCommand(SQL2,conn)
Dim dbreader2=cmd2.ExecuteReader()
对于dbreader2中的每个记录2
XMLOutput=XMLOutput+“”
下一个
dbreader2.Close()
XMLOutput=XMLOutput+“”
CloseDatabase()
XMLOutput=XMLOutput+“”
Response.Write(XMLOutput)
端接头
末级
更新了仍有问题的代码:

Imports System.Data.SqlClient

Public Class WebForm1
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    writemystuff()
End Sub

Dim conn As New SqlConnection

Sub CloseDatabase()
    conn.Close()
End Sub

Sub ConnectToDatabase()
    conn.ConnectionString = ConfigurationManager.ConnectionStrings("dbSQL").ConnectionString
    conn.Open()
End Sub


Sub writemystuff()

    'Response.Write(SQL1)

    Dim XMLOutput = "<?xml version=""1.0"" encoding=""utf-8"" ?>"
    'XMLOutput = XMLOutput + "<?xml-stylesheet type=""text/xsl"" href=""XMLSchema1.xslt""?>"
    XMLOutput = XMLOutput + "<requests "
    XMLOutput = XMLOutput + " xmlns = ""http://www.w3schools.com"""
    XMLOutput = XMLOutput + " xmlns:xsi = ""http://www.w3.org/2001/XMLSchema-instance"""
    XMLOutput = XMLOutput + " xsi:schemaLocation=""http://www.w3schools.com XMLSchema1.xsd"">"
    ConnectToDatabase()

    Dim choice = Request("requestchoice")
    Dim SQL1 = "select * from request where r_id = 314"
    If choice = "Request 112" Then
        SQL1 = "select * from request where r_id = 112"
    End If

    Dim cmd = New SqlCommand(SQL1, conn)
    Dim dbreader = cmd.ExecuteReader()
    For Each record In dbreader


        While dbreader.Read()
            Dim requestid = dbreader.GetInt32(1)
            XMLOutput = XMLOutput + "<vendor"
            XMLOutput = XMLOutput + " v_name=""" & dbreader.GetString(2) & """"
            XMLOutput = XMLOutput + " v_id=""" & dbreader.GetInt32(0) & """"
            XMLOutput = XMLOutput + " r_id=""" & dbreader.GetInt32(1) & """"
            XMLOutput = XMLOutput + " >"
            Dim SQL2 = "select * from product where r_id = " & requestid
        End While

        Dim cmd2 = New SqlCommand(SQL2, conn)

        Dim dbreader2 = cmd2.ExecuteReader()
        While dbreader2.Read()
            XMLOutput = XMLOutput + "<product"
            XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
            XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
            XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
            XMLOutput = XMLOutput + " >"
        End While

    Next

    XMLOutput = XMLOutput + "</request>"


    CloseDatabase()
    XMLOutput = XMLOutput + "</requests>"
    Response.Write(XMLOutput)
End Sub
End Class
导入System.Data.SqlClient
公共类WebForm1
继承System.Web.UI.Page
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
writemystuff()
端接头
Dim conn作为新的SqlConnection
子数据库()
康涅狄格州关闭
端接头
子连接数据库()
conn.ConnectionString=ConfigurationManager.ConnectionString(“dbSQL”).ConnectionString
康涅狄格州公开赛
端接头
子写入系统uff()
'Response.Write(SQL1)
Dim XMLOutput=“”
'XMLOutput=XMLOutput+“”
XMLOutput=XMLOutput+“”
ConnectToDatabase()
Dim choice=请求(“请求选择”)
Dim SQL1=“从请求中选择*,其中r\u id=314”
如果选择=“请求112”,则
SQL1=“从请求中选择*,其中r\u id=112”
如果结束
Dim cmd=新的SqlCommand(SQL1,conn)
Dim dbreader=cmd.ExecuteReader()
对于dbreader中的每条记录
而dbreader.Read()
Dim requestid=dbreader.GetInt32(1)
XMLOutput=XMLOutput+“”
Dim SQL2=“从产品中选择*,其中r\u id=“&requestid
结束时
Dim cmd2=新的SqlCommand(SQL2,conn)
Dim dbreader2=cmd2.ExecuteReader()
而dbreader2.Read()
XMLOutput=XMLOutput+“”
结束时
下一个
XMLOutput=XMLOutput+“”
CloseDatabase()
XMLOutput=XMLOutput+“”
Response.Write(XMLOutput)
端接头
末级

您需要在
SqlDataReader
对象上调用
.Read()
,以获取行的数据,如下所示:

While dbreader2.Read()
    ' Do logic here to get individual values from each row
End While 
更新:

与此相反:

Dim dbreader2 = cmd2.ExecuteReader()
For Each record2 In dbreader2
    XMLOutput = XMLOutput + "<product"
    XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
    XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
    XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
    XMLOutput = XMLOutput + " >"

Next

更新2:

好的,下面是完整的方法代码:

Sub writemystuff()
    'Response.Write(SQL1)

    Dim XMLOutput = "<?xml version=""1.0"" encoding=""utf-8"" ?>"
    'XMLOutput = XMLOutput + "<?xml-stylesheet type=""text/xsl"" href=""XMLSchema1.xslt""?>"
    XMLOutput = XMLOutput + "<requests "
    XMLOutput = XMLOutput + " xmlns = ""http://www.w3schools.com"""
    XMLOutput = XMLOutput + " xmlns:xsi = ""http://www.w3.org/2001/XMLSchema-instance"""
    XMLOutput = XMLOutput + " xsi:schemaLocation=""http://www.w3schools.com XMLSchema1.xsd"">"
    ConnectToDatabase()

    Dim choice = Request("requestchoice")
    Dim SQL1 = "select * from request where r_id = 314"
    If choice = "Request 112" Then
        SQL1 = "select * from request where r_id = 112"
    End If

    Dim cmd = New SqlCommand(SQL1, conn)
    Dim dbreader = cmd.ExecuteReader()
    Dim requestid As Integer
    While dbreader.Read()
        requestid = dbreader.GetInt32(1)
        XMLOutput = XMLOutput + "<vendor"
        XMLOutput = XMLOutput + " v_name=""" & dbreader.GetString(2) & """"
        XMLOutput = XMLOutput + " v_id=""" & dbreader.GetInt32(0) & """"
        XMLOutput = XMLOutput + " r_id=""" & dbreader.GetInt32(1) & """"
        XMLOutput = XMLOutput + " >"
    End While

    Dim SQL2 = "select * from product where r_id = " & requestid
    Dim cmd2 = New SqlCommand(SQL2, conn)
    Dim dbreader2 = cmd2.ExecuteReader()
    While dbreader2.Read()
        XMLOutput = XMLOutput + "<product"
        XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
        XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
        XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
        XMLOutput = XMLOutput + " >"
    End While
    dbreader2.Close()
    XMLOutput = XMLOutput + "</request>"

    CloseDatabase()
    XMLOutput = XMLOutput + "</requests>"
    Response.Write(XMLOutput)
End Sub
Sub-writemystuff()
'Response.Write(SQL1)
Dim XMLOutput=“”
'XMLOutput=XMLOutput+“”
XMLOutput=XMLOutput+“”
ConnectToDatabase()
Dim choice=请求(“请求选择”)
Dim SQL1=“从请求中选择*,其中r\u id=314”
如果选择=“请求112”,则
SQL1=“从请求中选择*,其中r\u id=112”
如果结束
Dim cmd=新的SqlCommand(SQL1,conn)
Dim dbreader=cmd.ExecuteReader()
将请求ID设置为整数
而dbreader.Read()
requestid=dbreader.GetInt32(1)
XMLOutput=XMLOutput+“”
结束时
Dim SQL2=“从产品中选择*,其中r\u id=“&requestid
Dim cmd2=新的SqlCommand(SQL2,conn)
Dim dbreader2=cmd2.ExecuteReader()
而dbreader2.Read()
XMLOutput=XMLOutput+“”
结束时
dbreader2.Close()
XMLOutput=XMLOutput+“”
CloseDatabase()
XMLOutput=XMLOutput+“”
Response.Write(XMLOutput)
端接头

您正在调用第一个数据读取器的
下一个

For Each record In dbreader
   ' Do Nothing
Next

' Reader is now at the end - can't read any more!
Dim requestid = dbreader.GetInt32(1)
但实际上,您应该在dbReader.Read()时使用
Do:

Do While dbReader.Read()
Dim requestid=dbreader.GetInt32(1)
XMLOutput=XMLOutput+“”
Dim SQL2=“从产品中选择*,其中r\u id=“&requestid
Dim cmd2=新的SqlCommand(SQL2,conn)
Dim dbreader2=cmd2.ExecuteReader()
在dbReader2.Read()时执行此操作
XMLOutput=XMLOutput+“”
环
环

DataReader用于从SQL Server数据库中读取仅向前的行流。您需要调用读取下一条记录

在您的代码上,您需要更改此项(例如,您需要更改它,因为它应该工作,请不要复制粘贴)

Dim dbreader2=cmd2.ExecuteReader()
对于dbreader2中的每个记录2
XMLOutput=XMLOutput+“”
下一个
比如

 Dim dbreader2 = cmd2.ExecuteReader()
 While  dbreader2.Read()
        XMLOutput = XMLOutput + "<product"
        XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
        XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
        XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
        XMLOutput = XMLOutput + " >"

 End While
Dim dbreader2=cmd2.ExecuteReader()
而dbreader2.Read()
XMLOutput=XMLOutput+“”
结束时
正如您可能想象的那样,只要您使用数据读取器,您的连接将仍然繁忙。您应该始终确保可以关闭数据读取器以关闭连接并再次将其发送到池。这是.NET中连接泄漏的主要原因之一


您可以使用语句“using”来执行try{}finally{}块(这是相同的事情)。

我已经编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。我应该将Dim SQL2放在哪里?@user2860150-同一个位置,不要更改检索数据的方式,只需使用For Each record In dbreader ' Do Nothing Next ' Reader is now at the end - can't read any more! Dim requestid = dbreader.GetInt32(1)
Do While dbReader.Read()

    Dim requestid = dbreader.GetInt32(1)
    XMLOutput = XMLOutput + "<vendor"
    XMLOutput = XMLOutput + " v_name=""" & dbreader.GetString(2) & """"
    XMLOutput = XMLOutput + " v_id=""" & dbreader.GetInt32(0) & """"
    XMLOutput = XMLOutput + " r_id=""" & dbreader.GetInt32(1) & """"
    XMLOutput = XMLOutput + " >"

    Dim SQL2 = "select * from product where r_id = " & requestid

    Dim cmd2 = New SqlCommand(SQL2, conn)

    Dim dbreader2 = cmd2.ExecuteReader()
    Do While dbReader2.Read()
        XMLOutput = XMLOutput + "<product"
        XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
        XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
        XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
        XMLOutput = XMLOutput + " >"

    Loop
Loop
 Dim dbreader2 = cmd2.ExecuteReader()
    For Each record2 In dbreader2
        XMLOutput = XMLOutput + "<product"
        XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
        XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
        XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
        XMLOutput = XMLOutput + " >"

 Next
 Dim dbreader2 = cmd2.ExecuteReader()
 While  dbreader2.Read()
        XMLOutput = XMLOutput + "<product"
        XMLOutput = XMLOutput + " p_name=""" & dbreader2.GetString(3) & """"
        XMLOutput = XMLOutput + " p_id=""" & dbreader2.GetInt32(0) & """"
        XMLOutput = XMLOutput + " cost=""" & dbreader2.GetDecimal(2) & """"
        XMLOutput = XMLOutput + " >"

 End While