2011.08最近想到另外一个方法:
Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load Dim cd As String Dim cmd As New sqlClient.sqlCommand Dim strWhere As String = String.Empty Dim dt As DataTable If Me.RdoOr.Checked Then cd = " or " Else cd = " and " End If If String.IsNullOrEmpty(Me.TxtItemNo.Text.Trim) = False Then strWhere &= (IIf(String.IsNullOrEmpty(strWhere),"",cd) & "strItemNo like (@strItemNo)") cmd.Parameters.Add(New sqlClient.sqlParameter("@strItemNo",Me.TxtItemNo.Text.Trim & "%")) End If If String.IsNullOrEmpty(Me.TxtItmeName.Text.Trim) = False Then strWhere &= (IIf(String.IsNullOrEmpty(strWhere),cd) & "strItemName like (@strItemName)") cmd.Parameters.Add(New sqlClient.sqlParameter("@strItemName",Me.TxtItmeName.Text.Trim & "%")) End If If String.IsNullOrEmpty(Me.TxtPrice.Text.Trim) = False Then strWhere &= (IIf(String.IsNullOrEmpty(strWhere),cd) & "dblPrice >= (@dblPrice)") '这里可以设置查询条件数字对比的连接符号:>= = <= cmd.Parameters.Add(New sqlClient.sqlParameter("@dblPrice",CDbl(Me.TxtPrice.Text.Trim))) End If If String.IsNullOrEmpty(Me.TxtSize.Text.Trim) = False Then strWhere &= (IIf(String.IsNullOrEmpty(strWhere),cd) & "strItemNo like (@strItemSize)") '这样可以查询包含有特殊符号的内容了。 cmd.Parameters.Add(New sqlClient.sqlParameter("@strItemSize",Me.TxtSize.Text.Trim & "%")) End If cmd.CommandText = "select * from tbl " & IIf(String.IsNullOrEmpty(strWhere)," where " & strWhere) 'cmd.CommandText ="sp_QueryItem" 'cmd.CommandType = CommandType.StoredProcedure dt = sqlHelper.GetDataTable(cmd) '查询结果:dt 'FillTB2MsgDvListSearch(dt) '填充表内容到DataGridView里面。 End Sub
很久很久以前的:查询条件组合方法,主要有StringBuilder,感觉比用vb6、vba方便多了。
Imports System.Text Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click Dim s As New StringBuilder Dim cd As String If Me.RadioButton1.Checked = True Then cd = " and " Else cd = " or " End If If String.IsNullOrEmpty(Me.TextBox1.Text.Trim) = False Then s.Append("货号 like '" & Me.TextBox1.Text.Trim & "%'" & cd) End If If String.IsNullOrEmpty(Me.TextBox2.Text.Trim) = False Then s.Append("年份 like '" & Me.TextBox2.Text.Trim & "%'" & cd) End If If String.IsNullOrEmpty(Me.TextBox3.Text.Trim) = False Then s.Append("大类别 like '" & Me.TextBox3.Text.Trim & "%'" & cd) End If If String.IsNullOrEmpty(Me.TextBox4.Text.Trim) = False Then s.Append("小类别 like '" & Me.TextBox4.Text.Trim & "%'" & cd) End If Me.TextBox5.Text = s.ToString.Remove(s.ToString.LastIndexOf(cd),cd.Length) End Sub End Class
界面:
界面2
---
2011.06 使用到程序中的代码:主要用到:Dictionary ,分开sqlParameter或者sqliteParameter参数
Dim sb As New StringBuilder Dim where,cd As String Dim p As sqlite.sqliteParameter Dim tb As DataTable Dim dics As New Dictionary(Of String,sqlite.sqliteParameter) Dim iKey As Integer = 0 Me.DvMsgListSearch.DataSource = Nothing If Me.RdoOr.Checked Then cd = " or " Else cd = " and " End If If String.IsNullOrEmpty(Me.TxtStrSubject1.Text.Trim) = False Then sb.Append("strSubject like (@strSubject)" & cd) p = db.MakeParameter("@strSubject",DbType.String,Me.TxtStrSubject1.Text.Trim & "%") dics.Add("strSubject",p) End If If String.IsNullOrEmpty(Me.TxtStrTag1.Text.Trim) = False Then sb.Append("strTag like (@strTag)" & cd) p = db.MakeParameter("@strTag",Me.TxtStrTag1.Text.Trim & "%") dics.Add("strTag",p) End If If String.IsNullOrEmpty(Me.TxtStrMsgAuthor1.Text.Trim) = False Then sb.Append("strMsgAuthor like (@strTag)" & cd) p = db.MakeParameter("@strMsgAuthor",Me.TxtStrMsgAuthor1.Text.Trim & "%") dics.Add("strMsgAuthor",p) End If If String.IsNullOrEmpty(Me.TxtStrMsgFrom1.Text.Trim) = False Then sb.Append("strMsgFrom like (@strMsgFrom)" & cd) p = db.MakeParameter("@strMsgFrom",Me.TxtStrMsgFrom1.Text.Trim & "%") dics.Add("strMsgFrom",p) 's.Append("strMsgFrom like '" & Me.TxtStrMsgFrom1.Text.Trim & "%'" & cd) End If If String.IsNullOrEmpty(Me.TxtStrContext1.Text.Trim) = False Then sb.Append("strContext like (@strContext)" & cd) p = db.MakeParameter("@strContext",Me.TxtStrContext1.Text.Trim & "%") dics.Add("strContext",p) 's.Append("strContext like '" & Me.TxtStrContext1.Text.Trim & "%'" & cd) End If If String.IsNullOrEmpty(Me.TxtStrReporter1.Text.Trim) = False Then sb.Append("strReporter like (@strReporter)" & cd) p = db.MakeParameter("@strReporter",Me.TxtStrReporter1.Text.Trim & "%") dics.Add("strReporter",p) 's.Append("strReporter like '" & Me.TxtStrReporter1.Text.Trim & "%'" & cd) End If If dics.Count > 0 Then where = sb.ToString.Remove(sb.ToString.LastIndexOf(cd),cd.Length) Dim pr(dics.Count - 1) As sqlite.sqliteParameter iKey = 0 For Each key As KeyValuePair(Of String,sqlite.sqliteParameter) In dics pr(iKey) = key.Value iKey += 1 Next tb = MsgCls.GetSimpleList(where,pr) FillTB2MsgDvListSearch(tb) End If