只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'tableX'中标识列的显式值。“

时间:2016-07-21 20:20:06

标签: sql sql-server vb.net

我收到上面的错误说我不能在不做这些事情的情况下明确定义标识列,但是我并没有尝试设置标识列的值。我只是尝试使用用户输入执行基本插入语句。我真的被困住了,需要克服这个问题。想法?

 Public Sub ExecuteSQL(ByVal sql As String)

    Using myConnection As New Data.SqlClient.SqlConnection(connString)
        myConnection.Open()
        Using cdmDatabaseCommand As New Data.SqlClient.SqlCommand(sql, myConnection)
            cdmDatabaseCommand.ExecuteNonQuery()
        End Using
    End Using
End Sub

  Dim insertSpray As String = ""
  insertSpray = "INSERT INTO Spray VALUES ('" & sprayDate & "','" & timeStart & "','" & timeFinish & "','" & tankVolumeStart & "','" & tankVolumeFinish & "','" & comment & "','" & vehicleId & "','" & vehicleTime & "','" & siteType & "','" & area & "','" & applicatorOneId & "','" & applicatorTwoId & "','" & sprayLocationFeature & "','" & sprayStartLocationDescription & "','NULL','NULL','NULL','NULL','" & sprayEndLocationDescription & "');"

  ExecuteSQL(insertSpray)

2 个答案:

答案 0 :(得分:2)

您没有指定列列表,因此SQL Server假定您要按表顺序插入所有列。

您需要更改语法以指定要插入的列的名称(显然忽略标识列):

insert into Spray (SprayDate, TimeStart, ...) 
values (...

另请注意,您的代码容易受到SQL injection攻击。您应该考虑使用parameterized queries

答案 1 :(得分:0)

尝试使用标识列显式创建表Spray的列。

这样的事情:

insertSpray = "INSERT INTO Spray(Column1, Column2,...) VALUES (Value1,Value2,..)"