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
Vb.net “我犯了错误”;位置0”处没有行;从下面的代码_Vb.net - Fatal编程技术网

Vb.net “我犯了错误”;位置0”处没有行;从下面的代码

Vb.net “我犯了错误”;位置0”处没有行;从下面的代码,vb.net,Vb.net,当我在txtID.text中输入错误或不存在的员工代码时,会出现此消息 如何解决这个问题首先最重要的是:您可以进行SQL注入,因为您不使用SQL参数,而是将查询与用户输入连接起来 出现错误的原因是您试图访问DataTable中的aDataRow,而不检查是否至少有一个。但是您正在使用索引inc访问该行,可能该表不包含这么多行。为什么在这里使用变量 Private Sub Button3_Click (ByVal sender As System.Object, ByVal e As System

当我在txtID.text中输入错误或不存在的员工代码时,会出现此消息


如何解决这个问题首先最重要的是:您可以进行SQL注入,因为您不使用SQL参数,而是将查询与用户输入连接起来

出现错误的原因是您试图访问
DataTable
中的a
DataRow
,而不检查是否至少有一个。但是您正在使用索引
inc
访问该行,可能该表不包含这么多行。为什么在这里使用变量

Private Sub Button3_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

    If txtID.Text = "" Then
        MsgBox("Please input a valid Employee code to load a corresponding record", MsgBoxStyle.Information)
    Else
        dbProvider = "Provider=Microsoft.Ace.OLEDB.12.0;"
        dbSource = "Data Source = C:\Users\Blessing\Documents\IBCARIP.accdb;Persist Security Info=False"
        con.ConnectionString = dbProvider & dbSource
        con.Open()
        sql = "select * from Calculator where " _
            & "EmpCode = " & " '" & txtID.Text & "'"

        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "IBCARIP")
        lblSAI.Text = ds.Tables("IBCARIP").Rows(inc).Item("SName") & ds.Tables("IBCARIP").Rows(inc).Item("FName")
        lblRate.Text = ds.Tables("IBCARIP").Rows(inc).Item("NRate")
        lblOT.Text = ds.Tables("IBCARIP").Rows(inc).Item("OTRate")
        lblBnk.Text = ds.Tables("IBCARIP").Rows(inc).Item("BName") & ".." & ds.Tables("IBCARIP").Rows(inc).Item("ANumber") & ".." & ds.Tables("IBCARIP").Rows(inc).Item("AType")
        con.Close()
        ds.Tables("IBCARIP").DataSet.Clear()
        MaxRows = ds.Tables("IBCARIP").Rows.Count
        'inc = 0
    End If
End Sub
下面是带参数的长版本:

da.Fill(ds, "IBCARIP")
If ds.Tables("IBCARIP").Rows.Count = 0 Then Return ' or something else

' here you can safely access the first row...
尝试如下

您应该始终检查数据集表和行数

我不太熟悉vb.net(我是C语言的),但我认为下面的内容很好

Using con = New OleDbConnection(dbProvider & dbSource)
    Dim sql = "select * from Calculator where EmpCode=?"
    Using da = New OleDbDataAdapter(sql, con)
        da.SelectCommand.Parameters.AddWithValue("@EmpCode", txtID.Text)
        da.Fill(ds, "IBCARIP")
        If ds.Tables("").Rows.Count > 0 Then
            Dim row = ds.Tables("IBCARIP").Rows(0)
            Dim SName = row.Field(Of String)("SName")
            Dim FName = row.Field(Of String)("FName")
            Dim sai = String.Format("{0}{1}", SName, FName)
            lblSAI.Text = sai
            ' ... '
        End If
    End Using
End Using

tim我将在不同的表单和表格上尝试您的代码,但它看起来比我的级别更高级,不过感谢yoiu的帮助
    If txtID.Text = "" Then
        MsgBox("Please input a valid Employee code to load a corresponding record", MsgBoxStyle.Information)
    Else
        dbProvider = "Provider=Microsoft.Ace.OLEDB.12.0;"
        dbSource = "Data Source = C:\Users\Blessing\Documents\IBCARIP.accdb;Persist Security Info=False"
        con.ConnectionString = dbProvider & dbSource
        con.Open()
        sql = "select * from Calculator where " _
            & "EmpCode = " & " '" & txtID.Text & "'"

        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "IBCARIP")
        If ds.Tables.Count > 0 AndAlso ds.Tables("IBCARIP").Rows.Count >0 Then
            lblSAI.Text = ds.Tables("IBCARIP").Rows(inc).Item("SName") & ds.Tables("IBCARIP").Rows(inc).Item("FName")
            lblRate.Text = ds.Tables("IBCARIP").Rows(inc).Item("NRate")
            lblOT.Text = ds.Tables("IBCARIP").Rows(inc).Item("OTRate")
            lblBnk.Text = ds.Tables("IBCARIP").Rows(inc).Item("BName") & ".." &                 ds.Tables("IBCARIP").Rows(inc).Item("ANumber") & ".." & ds.Tables("IBCARIP").Rows(inc).Item("AType")
            con.Close()
            ds.Tables("IBCARIP").DataSet.Clear()
            MaxRows = ds.Tables("IBCARIP").Rows.Count
            'inc = 0
        End if  
    End If
End Sub