【问题标题】:Check if x is IN columna,columnb检查 x 是否为 IN columna,columnb
【发布时间】:2017-09-27 19:07:15
【问题描述】:

我正在构建一个报告页面,并希望能够有一个下拉列表,该下拉列表根据在另一个下拉菜单中选择的资金来源从 sql 数据库中提取客户。客户可以有多个资金来源。该表包含三列:ClientID、FundingSource1 和 FundingSource2。

我需要设置一个 SQL 查询:

Select clientID
FROM clientTable
WHERE fundingvariable IN (@fundingsource1, @fundingsource2)

这样我就可以在下拉菜单中选择一个资金变量,并让报告返回所有具有该资金变量的客户,无论该变量是在第一列还是第二个资金来源列中。

显然 Select 语句不能识别在 VB 中声明的变量。如何识别 SQL 语句中的非特定变量,然后我可以调用相关下拉列表的方法?

【问题讨论】:

  • 我没有看到你不能这样做的原因WHERE fundingvariable = fundingsource1 or fundingvariable = fundingsource2
  • 如果你能尝试一下你想要完成的事情会有所帮助...
  • @Degan 该链接无关紧要,OP 在哪里对 Excel 说了什么?
  • @Codexer,你是对的。我不恰当地暗示 Excel。

标签: sql sql-server vb.net


【解决方案1】:

在您的 SQL 语句中,您不能只选择 ClientID。 Select is for you 表中的列。如果您有 2 列fundingsource1 和 2 以及 clientid,并且您想查看 clientid 是否是这 2 列,那么您编写类似这样的内容

"SELECT fundingsource1, fundingsource2 WHERE (fundingsource1=@clientid) or (fundingsource2=@clientid)"

如果表有超过 2 列,并且您需要访问所有列中的数据,那么您可以编写类似这样的内容

 "SELECT * WHERE (fundingsource1=@clientid) or (fundingsource2=@clientid)"

这是一个用于 MS SQL 服务器的类。实际上,对于我一直在做的事情,我在课堂上有更多的功能。我不喜欢重写代码行。如果您想了解 newID 和 execscalar,请阅读 execscalar。

您可以像这样在您的项目中使用它并更改连接字符串以匹配您的

sub Something ()
Dim xDB as new dbcontrol
dim SQLQuery as string = "SELECT fundingsource1, fundingsource2 WHERE (fundingsource1=@clientid) or (fundingsource2=@clientid)"
xdb.addparams("@clientid",ClientID)

xdb.execquery(SQLQuery)

end sub

SQL DBControl 类

    Imports System.Data.SqlClient

    Public Class DBControl
        ' CREATE YOUR DB CONNECTION
        'Change the datasource
        Public SQLSource As String = "Data Source=someserver\sqlexpress;Integrated Security=True"
        Private DBCon As New SqlConnection(SQLSource)

        ' PREPARE DB COMMAND
        Private DBCmd As SqlCommand

        ' DB DATA
        Public DBDA As SqlDataAdapter
        Public DBDT As DataTable

        ' QUERY PARAMETERS
        Public Params As New List(Of SqlParameter)

        ' QUERY STATISTICS
        Public RecordCount As Integer
        Public Exception As String

        Public Sub ExecQuery(Query As String, Optional ByVal ExecScalar As Boolean = False, Optional ByRef NewID As Long = -1)
            ' RESET QUERY STATS
            RecordCount = 0
            Exception = ""

            Try
                ' OPEN A CONNECTION
                DBCon.Open()

                ' CREATE DB COMMAND
                DBCmd = New SqlCommand(Query, DBCon)

                ' LOAD PARAMS INTO DB COMMAND
                Params.ForEach(Sub(p) DBCmd.Parameters.Add(p))

                ' CLEAR PARAMS LIST
                Params.Clear()

                ' EXECUTE COMMAND & FILL DATATABLE
                If ExecScalar = True Then
                    NewID = DBCmd.ExecuteScalar()
                End If
                DBDT = New DataTable
                DBDA = New SqlDataAdapter(DBCmd)
                RecordCount = DBDA.Fill(DBDT)
            Catch ex As Exception
                Exception = ex.Message
            End Try


            ' CLOSE YOUR CONNECTION
            If DBCon.State = ConnectionState.Open Then DBCon.Close()
        End Sub

        ' INCLUDE QUERY & COMMAND PARAMETERS
        Public Sub AddParam(Name As String, Value As Object)
            Dim NewParam As New SqlParameter(Name, Value)
            Params.Add(NewParam)
        End Sub
    End Class

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 2022-11-01
    • 2018-03-15
    • 1970-01-01
    • 2012-07-02
    • 2019-08-07
    • 2013-06-08
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多