我试图找到一种合适的方法来做到这一点,而不是简单的字符串连接。使用参数构建sql语句IN?
我有一个(简单)的SQL语句如下:
SELECT * FROM Zones WHERE id in (@zoneIDs);
我打算插入一个@zoneIDs
值一样,例如:100000,100001,100002
我用VB在这种特定情况下,但它应该使用MySQL连接器应用于任何.Net语言。我想要是这样的:
Private GetZones As String = "SELECT * FROM Zones WHERE id in (@zoneIDs)"
Dim Param As MySqlParameter = New MySqlParameter("@zoneIDs", MySqlDbType.String)
Param.Value = "100000,100001,100002"
Dim adapter As MySqlDataAdapter = New MySqlDataAdapter(GetZones)
Dim dt as DataTable = New DataTable()
adapter.Fill(dt)
但是,什么是越来越充满dt
只是一行ID 100000,好像没有其他人都在查询中。我的猜测是,它的运行如下命令:
SELECT * FROM Zones WHERE id in ("100000,100001,100002");
代替
SELECT * FROM Zones WHERE id in (100000,100001,100002);
我个人更喜欢使用存储过程而不是像这样的字符串,但我相信我会打一个类似的墙上有。使用这样的参数填充IN子句的正确方法是什么?
Joel Spolsky的回答是一个表演笑话。我宁愿与马克·布拉克特的答案一起去,但这仍然是一种管道粘贴解决方案。我希望有一些方法可以正确地做到这一点。如果这是一个存储过程,我将无法做任何解决方案。 –
如果这个臭名昭着的问题有一个优雅的解决方案,那将是很好的。你可以用一些.net扩展类自己解决它。 –
您是否曾尝试将不同的zoneID放入字符串数组中,并遍历数组并迭代每次迭代,将返回的行添加到已声明的数据集中?虽然服务器上的密集程度更高(取决于您可以返回多少行),但它起作用。如果需要进一步解释,请告诉我。 –