【发布时间】:2016-09-30 17:12:22
【问题描述】:
所以我目前正在从事一个项目,我希望从与屏幕上可修改列表匹配的表中检索所有数据。这是我用来拨打电话的代码示例
Public Sub GetAnimals(ByReg selectedTypes As String)
Dim strSql As String
Dim pselectedTypes As SqlClient.SqlParameter = New SqlClient.SqlParameter("@pselectedTypes", selectedTypes)
Dim strDBConnection As String = DBConnection.GetConnection.ConnectionString
Dim rs As DataSet = new DataSet
strSql = "SELECT * FROM PetInformation WHERE AnimalType IN (@pselectedTypes)"
Using sqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(strDBConnection)
sqlConn.Open()
Using sqlcmd As SqlClient.SqlCommand = New SqlClient.SqlCommand
With sqlcmd
.Connection = sqlConn
.CommandTimeout = DBConnection.DLLTimeout
.CommandType = CommandType.Text
.CommandText = strSql
.Parameters.Add(pselectedTypes)
Using sqlda As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(sqlcmd)
sqlda.Fill(rs)
End Using
End with
End Using
End Using
' Data Calculations
End Sub
这会使 SQL 查询看起来像这样。在本例中,我将我的动物列表用作猫和狗。
exec sp_executesql N'SELECT * FROM PetInformation WHERE AnimalType IN (@pselectedTypes)',N'@pselectedTypes nvarchar(22),@pselectedTypes='''cat'',''dog'''
所以一切看起来都很好,但是当我去运行它并执行它时,我没有得到任何结果。如果我将 sql 更改为看起来像其中任何一个,我会取回数据,但是由于生成了这个 SQL,所以如果没有从参数化 sql 切换,这并不是一个真正的选项,我不想这样做。
exec sp_executesql N'SELECT * FROM PetInformation WHERE AnimalType IN (''cat'',''dog'')',N'@pselectedTypes nvarchar(22),@pselectedTypes='''cat'',''dog'''
或
SELECT * FROM PetInformation WHERE AnimalType IN ('cat','dog')
有什么建议或想法吗?
【问题讨论】:
-
MySQL 和 SQL Server 是两种不同的生物
-
我在 MySQL 和 SQL Server 上的不好,我匆忙添加了标签,没有检查它们。
-
我有一种感觉 selectedTypes 是作为一个通用集合开始的?您可以将泛型集合作为表值参数传递给存储过程。使这种事情变得简单。 :D
标签: sql .net sql-server vb.net