无法查看此错误的位置:System.Data.SqlClient.SqlException:“'10'附近的语法不正确。[复制]

Cannot see where this error is: System.Data.SqlClient.SqlException: 'Incorrect syntax near '10'.' [duplicate]

提问人:MGC 提问时间:10/13/2023 最后编辑:Dale KMGC 更新时间:10/13/2023 访问量:79

问:

我看不到错误在查询中的用途,无论是在添加还是编辑块中。sqlAction

提前致谢。

抛出错误:

System.Data.SqlClient.SqlException:“'11' 附近的语法不正确。

文本可视化工具显示:

Insert into Creditors 
Values ('asdf', 'asdf', 'asdf', 'asdf', 'sadf', 'asdf', 'Australia', '231234', 13/10/2023 11:26:53 AM, 'Admin', 1)

代码如下:

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
    'Save addition/Changes
    'Insert/Edit A Record
    'Dim i As Integer

    Dim I1 As String = TextBox1.Text
    Dim I2 As String = TextBox2.Text
    Dim I3 As String = TextBox3.Text
    Dim I4 As String = TextBox4.Text
    Dim I5 As String = TextBox5.Text
    Dim I6 As String = TextBox6.Text
    Dim I7 As String = TextBox7.Text
    Dim I8 As String = TextBox9.Text
    Dim I9 As Date = Now()
    Dim I10 As String = strUserName
    Dim I11 As String = CheckBox1.Enabled

    If CheckBox1.Checked = True Then
        I11 = 1
    Else
        I11 = 0
    End If

    Dim pid As Integer = TextBox8.Text

    'Stop
    If con.State = ConnectionState.Open Then con.Close()

    If IsAdding = True Then

        'Stop
        con.Open()
        'Insert line into Creditors
        sqlAction = "Insert into Creditors Values ('" & I1 &
                    "','" & I2 & "', '" & I3 &
                    "', '" & I4 & "', '" & I5 & "', '" & I6 &
                    "','" & I7 & "','" & I8 & "', " & I9 & ", '" &
                    I10 & "', " & I11 & ")"
        sqlCmd = New SqlCommand(sqlAction, con)

        sqlCmd.ExecuteNonQuery()

        'MessageBox.Show("Sucessful")

        Call DefaultButtons()
        ' Stop
        LoadData(0)

    Else
        ' Stop

        'Edit Existing Record
        sqlAction = "Update Creditors Set CreditorName = '" & I1 &
                    "', Addr1 = '" & I2 & "', Addr2 = '" & I3 &
                    "', City = '" & I4 & "', State = '" & I5 &
                    "', PostCode = '" & I6 & "', Country ='" & I7 &
                    "', ContactNbr = '" & I8 &
                    "',DateAdded = " & I9 & ", AddedBy = '" & I10 & "', IsActive = " & I11 &
                    " where CreditorID = " & pid & ""
        con.Open()
        sqlCmd = New SqlCommand(sqlAction, con)

        sqlCmd.ExecuteNonQuery()
        LoadData(0)

        'MessageBox.Show("Sucessful")
    End If
    con.Close()
    Call TextBoxDisabled()
    IsAdding = False
    IsEditing = False
End Sub

表结构:

CreditorId  int False   
CreditorName    nvarchar(50)    False   
Addr1   nvarchar(50)    True    
Addr2   nvarchar(50)    True    
City    nvarchar(50)    True    
State   nvarchar(50)    True    
PostCode    nvarchar(50)    True    
Country nvarchar(50)    True    
ContactNbr  nvarchar(50)    True    
DateAdded   date    False   
AddedBy nvarchar(50)    False   
IsActive    bit False   
sql-server vb.net

评论

6赞 Peter B 10/13/2023
大多数(如果不是全部)SQL 方言中的日期都需要分隔符。例如,在 SQL Server 中,您必须使用单引号。此外,你永远不应该以这种方式构建SQL字符串,这是在自找麻烦。请改用 SqlParameter
6赞 Dai 10/13/2023
没有好的说法,但是你的代码在很多方面都做错了,难怪你会遇到问题。请了解如何使用参数化查询。
3赞 Craig 10/13/2023
这几条评论在这里非常重要。将 SQL 命令转换为参数化查询,即可直接传入日期值,而不必担心其在串联字符串中的格式
4赞 Craig 10/13/2023
使用您当前的代码,如果债权人的名字是 O'DONOGHUE(例如),您将遇到问题......
6赞 MGC 10/13/2023
谢谢彼得、克雷格和戴;没有冒犯。我今年 75 岁,离开 IT 行业已经 20 多年了。我曾经告诉程序员,如果他们不能接受我告诉他们他们写了 sh*t 代码,那么他们就不能为我工作。我上一次看 SQL 是在 2000 年左右,而 vb 可以追溯到 80 年代。感谢您的帮助。我只是感到无聊,决定自学这些“新奇”的语言。

答:

1赞 jmcilhinney 10/13/2023 #1

这个问题不是由拼写错误引起的,而是由缺乏 SQL 语法知识引起的,因此将其作为拼写错误关闭将是一种伤害。如第一条评论中所建议的,导致您报告的错误消息的直接问题是您没有将日期/时间文字放在单引号中:

, '2023-10-13 11:26:53 AM',

还要注意首选的、明确的日期格式。还有许多其他方法可以改进代码,但这将解决特定的语法错误。