当 ASP.NET 不存在数据时,读取尝试无效
Error is on line 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
更新了仍然存在问题的代码:
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
最佳答案
您需要在 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
这样做:
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
Note: If you are interested in knowing if the
SqlDataReader
has any rows or not, then you can check that before looping through the reading of rows, like this:
Dim dbreader2 = cmd2.ExecuteReader()
If dbreader2.HasRows Then
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
Else
' Potentially generate a "no data found" message here, etc.
End If
更新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
关于asp.net - "Invalid attempt to read when no data is present",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618097/