sql - vb.net 无法在 OR 语句中获取数据库值
问题描述
我有kriteria
列名的数据库,其中kode
包含值kriteria 1
kriteria 6
我希望用户可以从中选择 3 到 6 个值kode
,它将在 datagridview 中显示为矩阵...
如果用户选择 6 个标准则没有问题,并且它显示矩阵 6x6
...但如果用户选择少于 6 个标准或参数为空,则它什么也不显示...
这是我的代码
Private Sub perhitungankriteria_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each item In menuuser.ListBox2.Items
list2.Add(item)
Next
connect()
End Sub
Sub connect()
Dim adapter As OleDbDataReader
Dim cmd As OleDbCommand
cmd = New OleDbCommand("SELECT kode FROM kriteria WHERE kode=@kriteria1 OR kode=@kriteria2 OR kode=@kriteria3 OR kode=@kriteria4 OR kode=@kriteria5 OR kode=@kriteria6", konek)
cmd.Parameters.Add("@kriteria1", OleDbType.VarChar, 50).Value = list2(0)
cmd.Parameters.Add("@kriteria2", OleDbType.VarChar, 50).Value = list2(1)
cmd.Parameters.Add("@kriteria3", OleDbType.VarChar, 50).Value = list2(2)
cmd.Parameters.Add("@kriteria4", OleDbType.VarChar, 50).Value = list2(3)
cmd.Parameters.Add("@kriteria5", OleDbType.VarChar, 50).Value = list2(4)
cmd.Parameters.Add("@kriteria6", OleDbType.VarChar, 50).Value = list2(5)
adapter = cmd.ExecuteReader
DataGridView1.Columns.Clear()
While adapter.Read
list.Add(adapter("kode"))
DataGridView1.Columns.Add(adapter("kode"), adapter("kode"))
End While
我在 sql SELECT 语句中尝试了 IN 而不是 WHERE 查询,但出现了同样的问题
解决方案
在用户从列表框中进行选择后,通过单击按钮调用 BuildCommand。
Dim list2() As String = {"kriteria1", "kriteria2", "kriteria3", "kriteria4", "kriteria5", "kriteria6"}
Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ListBox1.DataSource = list2
Private Sub BuildCommand()
Dim sb As New StringBuilder("SELECT kode FROM kriteria WHERE kode = ")
Dim ct As Integer = ListBox1.SelectedItems.Count
Dim cn As New OleDbConnection("Your connection string")
Dim cmd As New OleDbCommand
cmd.Parameters.Add("@kriteria1", OleDbType.VarChar, 50).Value = list2(0)
cmd.Parameters.Add("@kriteria2", OleDbType.VarChar, 50).Value = list2(1)
cmd.Parameters.Add("@kriteria3", OleDbType.VarChar, 50).Value = list2(2)
cmd.Parameters.Add("@kriteria4", OleDbType.VarChar, 50).Value = list2(3)
cmd.Parameters.Add("@kriteria5", OleDbType.VarChar, 50).Value = list2(4)
cmd.Parameters.Add("@kriteria6", OleDbType.VarChar, 50).Value = list2(5)
If ListBox1.SelectedItems.Contains(ListBox1.Items(0)) Then
sb.Append("@kriteria1 OR kode = ")
End If
If ListBox1.SelectedItems.Contains(ListBox1.Items(1)) Then
sb.Append("@kriteria2 OR kode = ")
End If
If ListBox1.SelectedItems.Contains(ListBox1.Items(2)) Then
sb.Append("@kriteria3 OR kode = ")
End If
If ListBox1.SelectedItems.Contains(ListBox1.Items(3)) Then
sb.Append("@kriteria4 OR kode = ")
End If
If ListBox1.SelectedItems.Contains(ListBox1.Items(4)) Then
sb.Append("@kriteria5 OR kode = ")
End If
If ListBox1.SelectedItems.Contains(ListBox1.Items(5)) Then
sb.Append("@kriteria6;")
End If
Dim strSQL As String = sb.ToString
If strSQL.EndsWith("= ") Then
Dim index As Integer = strSQL.LastIndexOf("O") 'last capital O
strSQL = strSQL.Remove(index)
strSQL &= ";"
End If
Debug.Print(strSQL) 'Check the immediate window
cmd.CommandText = strSQL
cmd.Connection = cn
'use your command as you wish
End Sub
推荐阅读
- angular - 如何在 kendo-multiselect 中实现搜索器
- python - 如何实现返回函数签名及其返回值的装饰器?
- android - ScrollView 及其内容使用“wrap_content”。如何分配约束优先级?
- javascript - JavaScript OOP 到 FP
- arrays - Python numpy:根据输入数组选择数组条目
- office-js - 如何在清单中排除 Excel 网页版
- python - ModuleNotFoundError 在不同的操作系统上具有相同的本地包设置
- reactjs - IE11 错误:TypeError:非数组对象必须有 [Symbol.iterator]() 方法
- python - 如何将一堆同名文件复制到一个文件夹中?
- javascript - Discord.js 角色重叠