查询正在mysql命令行上运行,但如何将总和放入标签
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
答案 0 :(得分:1)
从不连接字符串以构建Sql语句。使用参数。您有损坏数据库的风险。
作为.Fill
方法的一部分,DataAdapter将为您打开和关闭其连接。但是,如果找到打开的连接,它将保持打开状态。
很高兴看到您在连接上打了一个.Dispose
,但是您可以使用`Using ... End Using blocks'来避免麻烦。这样可以确保即使发生错误也可以关闭并处置数据库对象。
现在输入代码。您没有填充或更新任何内容,因此此查询不需要DataAdapter
。您没有绑定任何东西,所以没有BindingSource
。 DataTable
(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