【发布时间】:2021-01-19 21:15:26
【问题描述】:
我有一个以日期列表为参数的查询。在 VB.NET 中,日期位于字符串 ArrayList 中,我使用 String.Join() 方法将它们放在逗号分隔的列表中。问题是当我这样做时,双引号会放在字符串的开头和结尾,而 SQL 会抱怨这一点(我认为;见下文)。如何从不带引号的字符串ArrayList 中获取日期列表。
我的数组列表包含这些值:
'2020-08-30'
'2020-08-27'
'2020-09-28'
'2020-09-09'
'2020-08-31'
'2020-08-29'
当我使用 String.Join(",", sDates) 加入他们时,我得到以下信息:
"'2020-08-30','2020-08-27','2020-09-28','2020-09-09','2020-08-31','2020-08-29'"
当我在参数查询中使用它时,它会被拒绝。
comm.Parameters.AddWithValue("@dates", String.Join(",", sDates))
sql 包含以下"
...where pj.ProjectName =@projectname And tcd.Date in (@dates)
我得到的确切错误是
System.Data.SqlClient.SqlException
HResult=0x80131904
Message=Incorrect syntax near ','.
Source=.Net SqlClient Data Provider
有什么建议吗?
【问题讨论】:
-
正确的做法是使用表值参数。
-
也可能是 addwithvalue 对您不利的情况之一。不知道 tcd.Date 的数据类型是什么,但您可能会发现 AddWithValue 假设您正在使用字符串并与日期列进行比较
-
当您说“我有一个查询”时,您的意思是存储过程吗?如果是这样,我们可以将存储过程视为问题的一部分吗?
-
tcd.Date的数据类型是什么?
标签: sql-server vb.net parameters