使用参数时出现"SQL0404: request value for TYPE is too long."错误



我使用此参数命令时遇到查询错误。参数中的 .NET 似乎添加了额外的字符,例如 'vbCrlf。如果我尝试没有参数,更新有效。

法典:

Dim con As OleDbConnection
Dim txt_tip As String
txt_tip = DataGridView1.Rows(i).Cells(0).Value.ToString(0)
conn.ConnectionString = "Provider=IBMDA400;Data Source=172.xx.xx.xx;User Id=user;Password=pwd;"
con = New OleDbConnection(conn.ConnectionString)
con.Open()
Using updCommand As New OleDbCommand("UPDATE $Customers SET TYPE=@type, Name='Rob', Surname='Red', Desc='Test10' WHERE ID=100", con)
updCommand.Parameters.Add("@type", OleDbType.VarChar, 1).Value = txt_tip
updCommand.ExecuteNonQuery()
End Using

如果我在没有参数的情况下尝试它,查询工作正常:

"UPDATE $Customers SET TYPE='1', Name='Rob', Surname='Red', Desc='Test10' WHERE ID=100" 

服务器是 IBM AS400。

OP 在评论中发布了答案

不要为参数指定名称,而是使用 ? 作为占位符:

Using updCommand As New OleDbCommand("UPDATE $Customers SET TYPE=?, Name='Rob', Surname='Red', Desc='Test10' WHERE ID=100", con)
    updCommand.Parameters.Add("?", OleDbType.Char).Value = txt_tip
    ...
End Using

如果您想添加更多,只需确保顺序正确:

Using updCommand As New OleDbCommand("UPDATE $Customers SET TYPE=?, Name=?, Surname=?, Desc='Test10' WHERE ID=100", con)
    updCommand.Parameters.Add("?", OleDbType.Char).Value = txt_tip
    updCommand.Parameters.Add("?", OleDbType.VarChar).Value = "Rob"
    updCommand.Parameters.Add("?", OleDbType.VarChar).Value = "Red"
    ...
End Using

相关内容

最新更新