【发布时间】:2015-09-12 18:48:21
【问题描述】:
我正在尝试通过将键列表作为 keycodelist 的参数传递来执行 sql 查询,但它不起作用。即使该值存在于数据库中,我也得到了 KeyNotFoundException。
我应该如何解决这个问题?是否需要转义调用getKeyValue的参数?
我这样调用函数。
getKeyValue("'username', 'userid'")
private Function getKeyValue(ByVal keyList as String)
Dim output As Dictionary (Of String, String)
Dim systemkeysql As String = "select key_code, key_value from system_key_table where key_code in (@keycodelist) "
Try
Using connection As New SqlConnection(getConnectionString())
Using command As New SqlCommand(systemkeysql, connection)
With (command.Parameters)
.Add(New SqlParameter("@keycodelist", System.Data.SqlDbType.NVarChar)).Value = keylist
End With
connection.Open()
Using reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
output.Add(reader(0), reader(1))
End While
End Using
End Using
connection.Close()
End Using
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly)
End Try
Return Output
End Function
【问题讨论】:
-
最短答案使用 表值参数
SELECT * FROM ... WHERE keycode IN (SELECT t.keycode FROM @tvp t)使用您的代码,您可以这样做:SELECT * FROM ... WHERE keycode IN ('key1,key2,key3')并且您想要SELECT * FROM ... WHERE keycode IN ('key1', 'key2', 'key3') -
感谢您的帮助。好知识要牢记。我需要与 DBA 交谈以授予此特定用户 ID 的创建权限。见[链接] (stackoverflow.com/questions/23679594/…)
标签: sql-server vb.net