因此,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)
放在下面的循环中,但是我遇到了各种各样的错误。
答案 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