【问题标题】:SQL statement that selects array values选择数组值的 SQL 语句
【发布时间】:2019-08-15 00:31:06
【问题描述】:

我正在开发一个 Visual Basic 项目。我有一个连接到我的项目的 mdb 数据库。我想添加一个SELECT 查询来查找我在程序中给出的数组中的结果

我试过写这样的声明:

SELECT kodu, adi_soyadi, sectigi_ders_say
FROM ogrenciler
WHERE kodu IN ?

但它不起作用。在我的页面代码中,我有一个数组,我想从"kodu" 在我的数组中的"ogrenciler" 表中查找结果。

【问题讨论】:

  • 您不能像这样将数组作为单个值传递。当您使用IN 时,您必须有一个离散值列表。你可以构建SQL并使用参数,这是正确的方式,如this
  • Kodu 是 String 字段还是数字字段?您可以构建一个逗号分隔的字符串(在括号中)以附加到您的 IN 语句 - Kodu IN (val1, val2, val3) 等(如果它是字符串,请在每个变量周围加上单引号)
  • 字符串字段。这是一个好方法,但我不知道我的数组中有多少个参数
  • 您不需要知道数组中有多少元素。如果您不打算使用参数,那么您可以这样做:sql = $"SELECT ... WHERE kodu IN ('{String.Join("', '", myArray}')"。如果您打算使用通常应该使用的参数,那么我提供的链接使用循环,因此可以处理任意数量的元素。
  • 您可以将数组加载到临时表中,然后使用 INNER JOIN 来获得您要查找的结果。我不认为你可以有一个数组参数并使用“WHERE kodu IN (?)”之类的东西

标签: sql vb.net ms-access


【解决方案1】:

好吧,您可以将该数组发送到 Access 中的临时表,但这会阻止多个用户同时使用该软件。 (或者您可以在临时表中添加一些用户名。但是,如果选择的数组很小,比如最多 50 个,那么您可以创建 sql 字符串。

例如:

    Dim MySQL As String = "SELECT * from tblHotels WHERE ID IN("
    Dim IdList(5) As Integer
    Dim i As Integer
    For i = 1 To 5
        IdList(i) = i
    Next

    Dim MyList As String = ""
    For i = 1 To 5
        If MyList <> "" Then MyList = MyList & ","
        MyList = MyList & IdList(i)
    Next
    MySQL = MySQL & MyList & ")"
    Using MyCon2 As New OleDbConnection(My.Settings.OLESQL)
        Dim da As New OleDbDataAdapter(MySQL, MyCon2)
        Dim rstDat As New DataTable()
        da.Fill(rstDat)
        For i = 0 To rstDat.Rows.Count - 1
            Debug.Print(rstDat.Rows(i).Item("HotelName"))
        Next ' etc etc. etc.
    End Using

所以你可以使用以下SQL格式:

 SELECT * FROM tblHotels where ID IN (1,2,3)

从而建立“列表”。这种方法的唯一缺点是 sql 字符串限制为 2000 个字符。因此,如果您的列表大于 50 项左右,那么您必须采用不同的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2014-02-13
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多