Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server VB.NET、SQL Server和日期列表_Sql Server_Vb.net_Parameters - Fatal编程技术网

Sql server VB.NET、SQL Server和日期列表

Sql server VB.NET、SQL Server和日期列表,sql-server,vb.net,parameters,Sql Server,Vb.net,Parameters,我有一个以日期列表为参数的查询。在VB.NET中,日期位于字符串ArrayList中,我使用string.Join()方法将它们放入逗号分隔的列表中。问题是,当我这样做时,双引号被放在字符串的开头和结尾,SQL对此表示不满(我想,请参见下文)。如何从没有引号的字符串ArrayList中获取日期列表 My arraylist包含以下值: '2020-08-30' '2020-08-27' '2020-09-28' '2020-09-09' '2020-08-31' '2020-08-29' 当我

我有一个以日期列表为参数的查询。在VB.NET中,日期位于字符串
ArrayList
中,我使用
string.Join()
方法将它们放入逗号分隔的列表中。问题是,当我这样做时,双引号被放在字符串的开头和结尾,SQL对此表示不满(我想,请参见下文)。如何从没有引号的字符串
ArrayList
中获取日期列表

My 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包含以下内容“

我得到的确切错误是

    System.Data.SqlClient.SqlException
    HResult=0x80131904
    Message=Incorrect syntax near ','.
    Source=.Net SqlClient Data Provider
有什么建议吗?

此错误消息:

“,”附近的语法不正确

不是由您在中执行操作的方式引起的。它是由其他原因引起的,例如select块中的逗号放错了位置:

SELECT , a FROM x
       ^
您在中完成任务的方式也不会起作用,因为它在概念上与编写以下内容相同:

SELECT * FROM table WHERE dateColumn IN ('''2000-01-01'',''2000-02-01''')
没有字符串值为
'2000-01-01'、'2000-02-01'
的日期

如果要在此处尝试的样式中使用,则必须为每个日期值添加一个参数,并进行相应设置:

sqlCommand.CommandText = "SELECT * FROM table WHERE dateCol IN("
Dim p = 0
For Each d as DateTime in MyDateList
  sqlCommand.CommandText &= "@p" & i & "," 'concat param placeholder on
  sqlCommand.Parameters.AddWithValue("@p" & i, d)
  i += 1
Next d

sqlCommand.CommandText = sqlCommand.CommandText.TrimEnd(","c) & ")" 'get rid of trailing comma and close the IN brackets
这将生成一个类似sql的

SELECT * FROM table WHERE dateCol IN (@p0,@p1,@p2)

有3个参数和一个填充的参数集合。你已经被指向Joel关于AddWithValue的博客,所以我不会重复。但我想说的是,你提出问题的方式意味着你有一个字符串列表,而不是datetimes。你应该确定你的列表中有datetimes,你的db列应该是基于日期的类型,而不是基于字符串的类型

正确的方法是使用表值参数。也可能是addwithvalue对您不利的实例之一。不知道tcd.date是什么数据类型,但您可能会发现addwithvalue假设您使用字符串并与日期列进行比较^^^当你说“我有一个查询”时,你是指存储过程吗?如果是的话,我们可以将存储过程看作问题的一部分吗?tcd.Date的数据类型是什么?
SELECT * FROM table WHERE dateCol IN (@p0,@p1,@p2)