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

幸运卢克82

我有要从数据库检索到的名字和姓氏,但是它不能正常工作。我从分开的列中的表中获得名称和姓氏。名称/姓氏以组合框/文本框组合的形式显示在我的表单上。现在,我需要检索此数据,但是在我的数据库中只有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

我尝试在“与”和“或”之间使用方括号,但这仍然行不通。有什么建议么 ?

永远VBNET

尽管我不喜欢您的方法,但是您应该分隔查询或为每个“人”请求为您提供一个函数来检索结果。对于您的解决方案,请尝试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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章