将DGV列中的值与数据库值进行比较,并将值添加到新的DGV列

时间:2014-07-12 14:58:42

标签: database vb.net loops ms-access datagridview

因此,Access数据库有两列,第一列是卖方名称(卖方),第二列是它的代码(CODE)。 Access数据库是包含所有卖方代码的数据库。

DGV从其他来源填充​​,由Access数据库中的一些CODE组成。 DGV有一列代码。

我想在DGV中使用基于DGV代码和Access数据库代码的SELLER名称创建和填充新列(SELLERNAME)。

我将举一个例子,因为我很难更好地解释这个: DGV:列0,第1个值= 0055,在Access数据库代码0055中对应于名称John 所以我想把名字“John”放在DGV Column1,第一个值,嵌套到“0055”等等

到目前为止,这是我的代码:

 DataGridView1.Columns.Add("SELLERNAME", "SELLERNAME") '1

    Dim cn As OleDb.OleDbConnection
    Dim cmd As OleDb.OleDbCommand
    Dim odr As OleDb.OleDbDataReader
    Dim strSQL As String
    cn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=w:\SCodes.MDB")

    strSQL = "SELECT SELLER, CODE FROM SCBASE"

    cn.Open()
    cmd = New OleDb.OleDbCommand(strSQL, cn)
    odr = cmd.ExecuteReader(CommandBehavior.CloseConnection)

    Do While odr.Read
        For i As Integer = 0 To DataGridView1.Rows.Count - 1
            DataGridView1.Rows(i).Cells(1).Value = odr.GetValue(1).ToString()
        Next
    Loop

我不知道在For i As Integer = 0 To DataGridView1.Rows.Count - 1行之后接下来要做什么。

编辑:

我认为我很接近,但我需要一行代码的帮助:

 Using sqlconn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=w:\SCodes.mdb")
        Using sqlcmd = New OleDbCommand("Select SELLER, CODE From SCBASE Where CODE = @CODE ", sqlconn)

            sqlcmd.Parameters.AddWithValue("@CODE ", DataGridView1.Rows(i).Cells(0).Value) 'HOW TO ADD THIS LINE IN LOOP BELOW

            sqlconn.Open()
            Dim result = sqlcmd.ExecuteReader()
            Do While (result.Read())
                For i As Integer = 0 To DataGridView1.Rows.Count - 1
                    DataGridView1.Rows(i).Cells(1).Value = (result("DOBAVLJAC"))
                Next
            Loop
    End Using
    End Using

我在试错中没有成功。我试图把这行sqlcmd.Parameters.AddWithValue("@CODE ", DataGridView1.Rows(i).Cells(0).Value)放在下面的循环中,但是我遇到了各种各样的错误。

1 个答案:

答案 0 :(得分:1)

是的,你很亲密。你只需要在循环外部.Add参数,然后像这样在循环中设置它的.Value

Using sqlconn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=w:\SCodes.mdb")
    sqlconn.Open()
    Using sqlcmd = New OleDbCommand("Select SELLER, CODE From SCBASE Where CODE = ?", sqlconn)
        sqlcmd.Parameters.Add("?", OleDbType.VarWChar, 255)
        sqlcmd.Prepare()
        For i As Integer = 0 To DataGridView1.Rows.Count - 1
            sqlcmd.Parameters(0).Value = DataGridView1.Rows(i).Cells(0).Value
            Using result = sqlcmd.ExecuteReader()
                If result.Read() Then
                    DataGridView1.Rows(i).Cells(1).Value = result("SELLER")
                End If
            End Using
        Next
    End Using
End Using