SQL查询和参数中的' - '附近的语法不正确

时间:2018-02-20 06:58:34

标签: sql-server vb.net tsql syntax-error

如果我在@Time-in中的参数@Time-outcmd.Parameters.Add中放置了一个括号,我收到了错误

  

日期时间附近的语法不正确。

但如果没有括号,我收到错误

  

' - '

附近的语法不正确
cmd.CommandText = "UPDATE [q].[dbo].[d] set 
    Name=@Name," & "[Reserve_date]=
    [@Reserve_date],Room=@Room,[Time-in]=[@Time-in],[Time-
    out]=[@Time-out] where ID=@ID;"

cmd.Parameters.Add("@ID", SqlDbType.Int).Value = Convert.ToInt32(SID)
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = sName
cmd.Parameters.Add("@Reserve_date", SqlDbType.DateTime).Value = sDate
cmd.Parameters.Add("@Room", SqlDbType.VarChar).Value = sRoom
cmd.Parameters.Add("@Time-in", SqlDbType.DateTime).Value = sStart
cmd.Parameters.Add("@Time-out", SqlDbType.DateTime).Value = sEnd

2 个答案:

答案 0 :(得分:0)

连字符-不是sql-server参数名称的有效字符。
例如,将其删除或更改为下划线_

摘自TechNet

  

Microsoft SQL Server无法识别变量名称并已存储   分隔的过程参数。这些类型的标识符   必须遵守常规标识符的规则。

有关标识符的更多信息,请访问:

答案 1 :(得分:0)

您无法命名这样的变量:

  

第一个字符必须是以下之一:

     

Unicode标准3.2定义的字母。 Unicode   字母的定义包括从a到z的拉丁字符   A到Z,还有其他语言的字母。

     

下划线(_),符号(@)或数字符号(#)。 ...

     

后续字符可包括以下内容:

     

Unicode标准3.2中定义的字母。

     

Basic Latin或其他国家/地区脚本中的十进制数字。

     

at符号,美元符号($),数字符号或下划线。

详见: msdn: db identifiers rules