从双参数动态检索Oracle数据?

时间:2016-09-05 07:54:27

标签: vb.net oracle

我有从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

我尝试在“和”&之间使用括号“或”,但这仍然无效。有什么建议 ?

1 个答案:

答案 0 :(得分:0)

虽然我不喜欢你的方法,你应该分开查询,或者让一个函数为每个“Person”请求检索结果。对于您的解决方案,请尝试从第一个和第二个“conca = " and "”语句中删除此if/else。将每个结果添加到数据表中,然后使用数据表加载gridview。

您应该调用与此类似的函数,以便在数据读取器中获取结果,然后提供数据表。这样您就可以分开查询。棘手的部分是有一个优雅的方式来加载您的datagridview。我的建议是停止使用数据表(它们非常糟糕)。您应该使用IEnumerableList (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