Visual Basic上的多个查询

时间:2018-04-26 14:24:50

标签: vb.net

如何使用带参数的多个查询? 我没有使用参数尝试这个,它正在工作 请帮我完成第二次查询... 请帮忙..

编辑:我的“query2”无效,每次添加或插入时,我的数据库表(history_pay)中都没有数据为空白...

con.Open()

    Try
        cmd = con.CreateCommand()
        cmd.CommandText = "INSERT INTO studentpay(id,student_name,course,year_level,semester,units,amount,orno,ordate,cashier,paymentfor,tuition,amountpay,balance) VALUES (@id,@student_name,@course,@year_level,@semester,@units,@amount,@orno,@ordate,@cashier,@paymentfor,@tuition,@amountpay,@balance)"


        ' this is my second query no inserting data
        query2 = "INSERT INTO history_pay (id,student_name,last_date,last_amountpaid,last_balance) VALUES (@id,@student_name,@ordate,@amount,@balance)"
        Dim QueryString As String = String.Concat(cmd, ";", query2)
        Dim command As New MySqlCommand(QueryString, con)


        cmd.Parameters.AddWithValue("@id", txtstudentid.Text)
        cmd.Parameters.AddWithValue("@student_name", txtstudentname.Text)
        cmd.Parameters.AddWithValue("@course", cblcourse.Text)
        cmd.Parameters.AddWithValue("@year_level", cblyear.Text)
        cmd.Parameters.AddWithValue("@semester", cblsemester.Text)
        cmd.Parameters.AddWithValue("@units", txtunits.Text)
        cmd.Parameters.AddWithValue("@amount", txtamountpay.Text)
        cmd.Parameters.AddWithValue("@orno", txtorno.Text)
        cmd.Parameters.AddWithValue("@ordate", txtordate.Text)
        cmd.Parameters.AddWithValue("@cashier", txtcashier.Text)
        cmd.Parameters.AddWithValue("@paymentfor", cblpaymentfor.Text)
        cmd.Parameters.AddWithValue("@tuition", lbltuition.Text)
        cmd.Parameters.AddWithValue("@amountpay", lblamountspay.Text)
        cmd.Parameters.AddWithValue("@balance", lblbalance.Text)
        cmd.ExecuteNonQuery()
        MsgBox("Sucessfully", MessageBoxButtons.OK, MessageBoxIcon.Information)
        load_data()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

1 个答案:

答案 0 :(得分:1)

首先,你的桌面设计看起来不稳定。我在两个不同的表中看到了重复值。您应该查看参考设计。

其次,我建议查看对象参考模型(ORM),因为它可以为您节省大量时间,同时还可以进行编译时检查。我认为这对于拥有50,​​000行代码的大型项目来说非常宝贵。你需要学习LINQ,但我建议学习LINQ,因为它是一个强大的数据挖掘和操作工具。

我建议使用Command.Parameters.Add而不是Command.Parameters.AddWithValue,但这更像是个人偏好,因为我使用TSQL而且我喜欢对输入进行精细控制。

我赞赏你使用参数而不是字符串concat。这有助于避免注入攻击。

至于你的问题,考虑到你提供的信息,如果我不能使用ORM,那么我就是这样做的,我不能让表设计得更多高效。

Using MySQLSERVER_Connection As New MySql.Data.MySqlClient.MySqlConnection("<Your Login Details>")
    Using MySQLCommand As New MySql.Data.MySqlClient.MySqlCommand()
        MySQLCommand.Connection = MySQLSERVER_Connection
        Dim Command As New Text.StringBuilder
        Command.AppendLine("INSERT INTO studentpay")
        Command.AppendLine("(id,student_name,course,year_level,semester,units,amount,orno,ordate,cashier,paymentfor,tuition,amountpay,balance)")
        Command.AppendLine("VALUES")
        Command.AppendLine("(@id,@student_name,@course,@year_level,@semester,@units,@amount,@orno,@ordate,@cashier,@paymentfor,@tuition,@amountpay,@balance);")
        MySQLCommand.Parameters.AddWithValue("@id", txtstudentid.Text)
        MySQLCommand.Parameters.AddWithValue("@student_name", txtstudentname.Text)
        MySQLCommand.Parameters.AddWithValue("@course", cblcourse.Text)
        MySQLCommand.Parameters.AddWithValue("@year_level", cblyear.Text)
        MySQLCommand.Parameters.AddWithValue("@semester", cblsemester.Text)
        MySQLCommand.Parameters.AddWithValue("@units", txtunits.Text)
        MySQLCommand.Parameters.AddWithValue("@amount", txtamountpay.Text)
        MySQLCommand.Parameters.AddWithValue("@orno", txtorno.Text)
        MySQLCommand.Parameters.AddWithValue("@ordate", txtordate.Text)
        MySQLCommand.Parameters.AddWithValue("@cashier", txtcashier.Text)
        MySQLCommand.Parameters.AddWithValue("@paymentfor", cblpaymentfor.Text)
        MySQLCommand.Parameters.AddWithValue("@tuition", lbltuition.Text)
        MySQLCommand.Parameters.AddWithValue("@amountpay", lblamountspay.Text)
        MySQLCommand.Parameters.AddWithValue("@balance", lblbalance.Text)
        MySQLSERVER_Connection.Open()
        MySQLCommand.ExecuteNonQuery()
        MySQLSERVER_Connection.Close()
    End Using
    Using MySQLCommand As New MySql.Data.MySqlClient.MySqlCommand()
        MySQLCommand.Connection = MySQLSERVER_Connection
        Dim Command As New Text.StringBuilder
        Command.AppendLine("INSERT INTO history_pay")
        Command.AppendLine("(id,student_name,last_date,last_amountpaid,last_balance)")
        Command.AppendLine("VALUES")
        Command.AppendLine("(@id,@student_name,@ordate,@amount,@balance);")
        MySQLCommand.Parameters.AddWithValue("@id", txtstudentid.Text)
        MySQLCommand.Parameters.AddWithValue("@student_name", txtstudentname.Text)
        MySQLCommand.Parameters.AddWithValue("@amount", txtamountpay.Text)
        MySQLCommand.Parameters.AddWithValue("@ordate", txtordate.Text)
        MySQLCommand.Parameters.AddWithValue("@amountpay", lblamountspay.Text)
        MySQLCommand.Parameters.AddWithValue("@balance", lblbalance.Text)
        MySQLSERVER_Connection.Open()
        MySQLCommand.ExecuteNonQuery()
        MySQLSERVER_Connection.Close()
    End Using
End Using

我使用单个连接和两个命令。请注意,我无法测试此代码。