Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
没有为一个或多个必需参数reader vb.net提供值_Vb.net - Fatal编程技术网

没有为一个或多个必需参数reader vb.net提供值

没有为一个或多个必需参数reader vb.net提供值,vb.net,Vb.net,我在窗体上运行以下代码时收到上述错误消息 Dim SqlString As String = "select [containmentid],[incidentid],[containmentdate],[containment] from [containment] WHERE [incidentid] = " & lbl_incidentid.Text & "" Using conn As New OleDbConnection(ConnString)

我在窗体上运行以下代码时收到上述错误消息

 Dim SqlString As String = "select [containmentid],[incidentid],[containmentdate],[containment] from [containment] WHERE [incidentid] = " & lbl_incidentid.Text & ""
    Using conn As New OleDbConnection(ConnString)
        Using command As New OleDbCommand(SqlString, conn)
            Using adapter As New OleDbDataAdapter(command)
                conn.Open()
                Dim reader As OleDbDataReader = command.ExecuteReader()
                Try
                    If reader.Read() Then
                        Button1.Visible = False
                    Else
                        Button1.Visible = True
                    End If
                Finally
                    reader.Close()
                End Try
            End Using
        End Using
    End Using
我认为这是因为我在lbl_包含的部分缺少了一个撇号,所以如果我修改sql行为

Dim SqlString As String = "select [containmentid],[incidentid],[containmentdate],[containment] from [containment] WHERE [incidentid] = '" & lbl_incidentid.Text & "'"
我现在得到以下错误

条件表达式中的数据类型不匹配

如果我修改sql行以读取一个数字,我知道是否存在如下情况

 Dim SqlString As String = "select [containmentid],[incidentid],[containmentdate],[containment] from [containment] WHERE [incidentid] = 622"

它工作得很好,我肯定会错过一些显而易见的东西,但我就是看不到。有人能告诉我为什么我的代码错了吗?

也许你需要删除整数周围的撇号。但是,不要试图解决这个问题。而是始终使用sql参数。例如,为了防止sql注入:

Dim SqlString As String = "select [containmentid],[incidentid],[containmentdate],[containment] from [containment] WHERE [incidentid] = @incidentid"
Using conn As New OleDbConnection(ConnString)
    Using command As New OleDbCommand(SqlString, conn)
        ' *** That's all you need to safeguard your code: ***
        command.Parameters.Add("@incidentid", OleDbType.Integer).Value = CInt(lbl_incidentid.Text)
        Using adapter As New OleDbDataAdapter(command)
            conn.Open()
            Dim reader As OleDbDataReader = command.ExecuteReader()
            Try
                If reader.Read() Then
                    Button1.Visible = False
                Else
                    Button1.Visible = True
                End If
            Finally
                reader.Close()
            End Try
        End Using
    End Using
End Using

没有缺少后缀,但sql参数如果incidentid是数据库中的字符串类型(例如varchar、nvarchar),则只需要使用撇号。如果是数值类型,如int,则不需要撇号。无论如何,您是否检查了
lbl\u incidentid.Text
是否确实包含有效值?另外,你的代码很容易受到SQL注入的攻击,你应该使用参数化查询,正如Tim的回答一样。Tim感谢你的回答,我承认我在这方面是个新手,我在构建这个项目的过程中大部分时间都在胡乱摸索。实际上,我不知道您可以使用参数。但是,command.Parameters.Add(“@incidentid”,OleDbType.Int)返回错误,错误“Int”不是“System.Data.OleDb.OleDbType”的成员。@Boneyt:您需要检查它是否适用于您。语法取决于数据库。也许你的不支持命名参数Hanks@Tim Schmelter,有什么办法可以阻止从字符串“label”到类型“Integer”的转换吗?@Boneyt:so
lbl\u incidentid.Text
包含字符串
label
,你想用它作为
incidentid
的参数吗?这听起来不像是incidentid的有效值。数据库中该列的类型是什么?如果是
varchar
(字符串),请使用
OleDbType.varchar
并删除
CInt
,您可以直接分配
lbl\u incidentid.Text