我有从DB中检索的姓名和姓氏,但它不能正常工作。我从表格中获取名称和姓氏,它们位于不同的列中。名称/姓氏在我的表单上以组合框/文本框组合显示。现在我需要检索这些数据,但我的数据库中只有4个字段需要搜索,因为所有名称/姓氏在这些字段中组合在一起(用户请求)。我的代码一次只能进行2次搜索,但并非适用于所有4次。这是我的代码:
编辑(现在可以了 - 我已将参数分开并在OR语句中添加了括号):
Using con As New OracleConnection("Data Source=myDB;User Id=Lucky;Password=MyPassword;")
con.Open()
Using cmd As New OracleCommand()
Dim SQL As String = "Select * FROM MyTable "
Dim conca As String = " Where "
Dim Person1 As String
Person1 = CmbName.Text.Trim & " " & TxtSurname.Text.Trim
If Not CmbName.Text = "" Then
SQL = String.Concat(SQL, conca, " (USER1 = :user OR USER2 = :user1)")
cmd.Parameters.Add(New OracleParameter("user", Person1))
cmd.Parameters.Add(New OracleParameter("user1", Person1))
conca = " and "
End If
Dim Person2 As String
Person2 = CmbName1.Text.Trim & " " & TxtSurname1.Text.Trim
If Not CmbName1.Text = "" Then
SQL = String.Concat(SQL, conca, " (ADMINISTRATOR1 = :admin OR ADMINISTRATOR2 = :admin1)")
cmd.Parameters.Add(New OracleParameter("admin", Person2))
cmd.Parameters.Add(New OracleParameter("admin1", Person2))
conca = " and "
End If
'Retrieve data using execute reader
cmd.Connection = con
cmd.CommandText = SQL
cmd.CommandType = CommandType.Text
Dim dr As OracleDataReader = cmd.ExecuteReader()
Dim dt As New DataTable
dt.Load(dr)
DataGridView1.DataSource = dt
End Using
我尝试在“和”&之间使用括号“或”,但这仍然无效。有什么建议 ?
答案 0 :(得分:0)
虽然我不喜欢你的方法,你应该分开查询,或者让一个函数为每个“Person”请求检索结果。对于您的解决方案,请尝试从第一个和第二个“conca = " and "
”语句中删除此if/else
。将每个结果添加到数据表中,然后使用数据表加载gridview。
您应该调用与此类似的函数,以便在数据读取器中获取结果,然后提供数据表。这样您就可以分开查询。棘手的部分是有一个优雅的方式来加载您的datagridview。我的建议是停止使用数据表(它们非常糟糕)。您应该使用IEnumerable
或List (Of Object)
来添加每个查询的结果。
Public Shared Function GetMeDatareader(yourQuery As String) As OracleDataReader
Using con As New OracleConnection("Data Source=myDB;User Id=Lucky;Password=MyPassword;")
con.Open()
Using cmd As New OracleCommand()
Dim SQL As String = yourQuery
'Retrieve data using execute reader
cmd.Connection = con
cmd.CommandText = SQL
cmd.CommandType = CommandType.Text
Dim dr As OracleDataReader = cmd.ExecuteReader()
Return dr
End Using
End Using
End Function