将查询总和转移到标签

时间:2019-03-15 16:52:58

标签: mysql vb.net

查询正在mysql命令行上运行,但如何将总和放入标签

enter image description here

Dim SDA As New MySqlDataAdapter
Dim bSource As New BindingSource
Dim dbDataSet As New DataTable
Try
    MysqlConn.Open()
    Dim Query As String

    Query = "select sum(No_Of_Case_To_Be_Deliver) from ordered= '" & totalcase.Text & "'"

    COMMAND = New MySqlCommand(Query, MysqlConn)
    SDA.SelectCommand = COMMAND
    SDA.Fill(dbDataSet)
    bSource.DataSource = dbDataSet
    MysqlConn.Close()


Catch ex As Exception
    MessageBox.Show(ex.Message)
Finally
    MysqlConn.Dispose()

End Try

1 个答案:

答案 0 :(得分:1)

从不连接字符串以构建Sql语句。使用参数。您有损坏数据库的风险。

作为.Fill方法的一部分,DataAdapter将为您打开和关闭其连接。但是,如果找到打开的连接,它将保持打开状态。

很高兴看到您在连接上打了一个.Dispose,但是您可以使用`Using ... End Using blocks'来避免麻烦。这样可以确保即使发生错误也可以关闭并处置数据库对象。

现在输入代码。您没有填充或更新任何内容,因此此查询不需要DataAdapter。您没有绑定任何东西,所以没有BindingSourceDataTable(dbDataSet)的错误名称,因为DataSet是不同类型的对象。任何试图维护您的代码的人都容易混淆。

通过使用参数,您不仅可以避免SQL注入,而且可以大大简化Sql语句。不用担心双引号,单引号等。

由于只检索一条数据,因此可以使用.ExecuteScalar返回结果集第一行的第一列。

我将代码分为数据访问功能和用户界面部分。这样,您只需将整个功能整合到一个平台即可将您的应用程序迁移到另一个平台,例如Web应用程序。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    lblTotalCases.Text = DirectCast(GetTotalCases(CInt(totalcase.Text)), String)
End Sub

Private Function GetTotalCases(OrderID As Integer) As Integer
    Dim TotalCases As Integer
    'I made up a query since your query didn't make sense.
    Dim Query = "select sum(No_Of_Case_To_Be_Deliver) from OrderDetails Where OrderID = @ID;"
    Using MysqlConn As New MySqlConnection("Your Connection String")
        Using Command As New MySqlCommand(Query, MysqlConn)
            Command.Parameters.Add("@ID", MySqlDbType.Int32).Value = OrderID
            MysqlConn.Open()
            TotalCases = CInt(Command.ExecuteScalar)
        End Using
    End Using
    Return TotalCases
End Function