我有SQL数据库表,并具有以下数据:
BillNo Particular Price Unit Amount Taxamount Tax
2905 Airfreight 100.000 100 10000.000 0.000 0.000
2905 Customs 4500.00 1 0.000 4500.000 675.000
2906 THC 250.000 1 0.000 250.000 38.000
2906 XYZ 5000.00 1 5000.000 0.0000 0.0000
在窗口表单中,我有一个名为 Tbblbillto.Text
的文本框,用于按帐单编号搜索,并且一个datagrid。当我在文本框中键入账单号时,如何将来自SQL表的数据进行过滤,然后将其放入DataGrid?
*Data Grid Table*
**Particular Price Unit Amount Taxamount Tax**
Private Sub Tbblbillto_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tbblbillto.TextChanged
Dim Cmd As New SqlClient.SqlCommand
Dim Con As New SqlClient.SqlConnection
Dim Rd As SqlDataReader
Con.ConnectionString = "Data Source=(localdb)MSSQLLocalDB;Initial Catalog=dbase;Integrated Security=True;Pooling=False"
Cmd.Connection = Con
Con.Open()
Dim Row As New DataGridViewRow
Dim Int As Integer
Row = Dgvbillsa.Rows(Int)
Cmd.CommandText = "Select * from BillDetails Where BillNo = '" & Tbblbillto.Text & "'"
Rd = Cmd.ExecuteReader
Rd.Read()
If Rd.HasRows Then
Row.Cells(0).Value = Rd.Item("Particular")
Row.Cells(1).Value = Rd.Item("Price")
Row.Cells(2).Value = Rd.Item("Unit")
Row.Cells(3).Value = Rd.Item("Amount")
Row.Cells(4).Value = Rd.Item("TaxAmount")
Row.Cells(5).Value = Rd.Item("Tax")
End If
End Sub
您可以使用DataTable
将数据直接加载到DataGridView
中,或者至少这就是我这样做的方式。
执行SQL命令时,您应该使用参数。这是为了减少语法问题,但更重要的是阻止SQL注入。有关此的更多详细信息,请参见Bobby Tables。
我也将考虑使用以下方式实施:
有时您的代码需要一个非管理的资源,例如文件句柄,包装器或SQL连接。A使用块可以保证处理一个或多个此类资源后,当您的代码与它们完成时。这使它们可用于其他代码。
随着更改,您的代码看起来与此相似:
Dim dt As New DataTable
Using con As New SqlConnection("Data Source=(localdb)MSSQLLocalDB;Initial Catalog=dbase;Integrated Security=True;Pooling=False"),
cmd As New SqlCommand("SELECT * FROM BillDetails WHERE BillNo = @BillNo", con)
con.Open()
cmd.Parameters.Add("@BillNo", SqlDbType.[Type]).Value = Tbblbillto.Text
dt.Load(cmd.ExecuteReader())
End Using
Dgvbillsa.DataSource = dt
请注意,我已经使用了
SqlDbType.[Type]
。您将需要用您在数据库上使用的数据类型替换[Type]
。
这将把数据直接加载到您的DataGridView
中。取决于DataGridView
的设置您可能需要为列进行一些更改。
这是我问题的答案:
Cmd.CommandText = "Select Particular, Price, Unit, Amount, TaxAmount, Tax from BillDetails Where BillNo = '" & Tbblbillto.Text & "' GROUP BY [Particular], [Price], [Unit], [Amount], [TaxAmount], [Tax]"
Rd.Close()
Rd = Cmd.ExecuteReader
While Rd.Read() OrElse (Rd.NextResult())
If Rd.HasRows Then
Dgvbillsa.Rows.Add(Rd.Item("Particular"), Rd.Item("Price"), Rd.Item("Unit"), Rd.Item("Amount"), Rd.Item("TaxAmount"), Rd.Item("Tax"))