无法创建字段salesreport的子列表

时间:2012-11-11 12:34:35

标签: vb.net

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOk.Click
    Dim scan As String = "select ProductCode from products where ProductCode = '" & TextBox1.Text & "';"
    connection.Open()
    Dim cmd = New MySqlCommand(scan, connection)
    Dim dr As MySqlDataReader = cmd.ExecuteReader
    If dr.Read = True Then
        MsgBox("Match found")
        connection.Close()
        Dim insert As String = "insert into salesreport (ProductName,ProductPrice) select products.ProductName,products.ProductPrice from products where products.ProductCode = '" & TextBox1.Text & "';"
        connection.Open()
        da = New MySqlDataAdapter(insert, connection)
        da.Fill(ds, "salesreport")
        DataGridView1.DataSource = ds
        DataGridView1.DataMember = "salesreport"
        connection.Close()
    Else
        connection.Close()
        MsgBox("No match found")
        TextBox1.Text = ""
        TextBox1.Select()
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

INSERT 语句不会返回记录 在这种情况下,使用DataAdapter来插入记录是没有意义的。

使用MySqlCommand.ExecuteNonQuery方法插入记录,然后使用MySqlDataAdapter读取添加的行

此外,不要连接文本,由您的用户键入,以构建和使用数据库引擎的SQL文本。您的代码可以轻松用于创建Sql Injection Attacks

    Dim scan As String = "select ProductCode from products " + 
                         "where ProductCode = ?prodCode"
    connection.Open()
    Dim cmd = New MySqlCommand(scan, connection)
    cmd.Parameters.AddWithValue("?prodCode", TextBox1.Text)
    ..........

    Dim insert As String = "insert into salesreport (ProductName,ProductPrice) " + 
                "select products.ProductName,products.ProductPrice from products " +
                "where products.ProductCode = ?prodCode"

    cmd = new MySqlCommand(insert, connection)
    cmd.Parameters.AddWithValue("?prodCode", TextBox1.Text)
    cmd.ExecuteNonQuery() 

    da = New MySqlDataAdapter(scan, connection)
    da.SelectCommand.Parameters.AddWithValue("?prodCode", TextBox1.Text)
    da.Fill(ds, "salesreport")

    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "salesreport"