我有一个更新查询,它从vb.net中的datagridview获取值并更新数据库中的表。
在执行update语句时,很明显datagridview中的某些字段由于某些条件而不会被填充。当我执行update语句时,它会将错误提供为','附近的错误语法。继续我得到的查询。
updatestring = "update pos_lti_dtl set item_code='" & X.Cells(4).Value & "',
description='" & X.Cells(5).Value & "',pack_sent=" & X.Cells(0).Value & ",
pack_received=" & X.Cells(2).Value & ",batch='" & X.Cells(6).Value & "',
expiry_date='" & X.Cells(7).Value & "',LOOSE_sent=" & X.Cells(2).Value & ",
LOOSE_received=" & X.Cells(3).Value & " where lti_no='" & transferno & "'"
我做了一些调试,在updatestring中发现了以下内容
update pos_lti_dtl set item_code='IIII',
description='',pack_sent=12,pack_received=,
batch='KKKKK',expiry_date='1/1/1900',
LOOSE_sent=,LOOSE_received= where lti_no='LTI/11011/2013'
我有一些数字字段,有时可能没有值,而且我已将数字值包含在“”中作为常规,当这些字段没有值时会出现这样的错误,请提供帮助。
答案 0 :(得分:1)
你必须像这样写
updatestring = "update pos_lti_dtl set item_code='" & X.Cells(4).Value & "',
description='" & X.Cells(5).Value & "',pack_sent='" & X.Cells(0).Value & "',
pack_received=" & X.Cells(2).Value & ",
batch='" & X.Cells(6).Value & "',
expiry_date='" & X.Cells(7).Value & "',
LOOSE_sent='" & X.Cells(2).Value & "',
LOOSE_received='" & X.Cells(3).Value & "' where lti_no='" & transferno & "'"
因此在执行中它看起来像这样
update pos_lti_dtl set item_code='IIII',
description='',pack_sent='12',pack_received='',
batch='KKKKK',expiry_date='1/1/1900',
LOOSE_sent='',LOOSE_received='' where lti_no='LTI/11011/2013'
你不能拥有columnname=
然后什么都不能,它必须附在'
之后。
此LOOSE_sent=,
失败
此LOOSE_sent='',
将有效
此LOOSE_sent=1,
将起作用,但如果没有传递整数值,则会失败。
修改
如果字段LOOSE_sent
和LOOSE_received
为空,则必须将它们从查询中取出,如果它们在数据库中的数据类型为 integer
。喜欢这个
updatestring = "update pos_lti_dtl set item_code='" & X.Cells(4).Value & "',
description='" & X.Cells(5).Value & "',pack_sent='" & X.Cells(0).Value & "',
pack_received=" & X.Cells(2).Value & ",
batch='" & X.Cells(6).Value & "',
expiry_date='" & X.Cells(7).Value & "'
where lti_no='" & transferno & "'"
答案 1 :(得分:1)
仅将其用作字符串会给您带来很多问题。如果您希望获得接近100%的成功率,请使用sql变量。
Dim ConString As String = "your connection"
Dim conn As New SqlClient.SqlConnection(ConString)
Dim cmd As New SqlClient.SqlCommand
conn.Open()
cmd.Connection = conn
cmd.CommandType = CommandType.Text
Dim sSQL = "UPDATE pos_lti_dtl SET "
cmd.Parameters.Add("@item_code", SqlDbType.Int).Value = X.Cells(4).Value
sSQL += "item_code = @item_code, "
cmd.Parameters.Add("@description", SqlDbType.Int).Value = X.Cells(5).Value
sSQL += "description=@description,"
cmd.Parameters.Add("@pack_sent", SqlDbType.Int).Value = x.Cells(0).Value
sSQL += "pack_sent=@pack_sent, "
cmd.Parameters.Add("@pack_received", SqlDbType.Int).Value = X.Cells(2).Value
sSQL += "pack_received=@pack_received, "
cmd.Parameters.Add("@batch", SqlDbType.Int).Value = X.Cells(6).Value
sSQL += "batch=@batch, "
cmd.Parameters.Add("@expiry_date", SqlDbType.Int).Value = X.Cells(7).Value
sSQL += "expiry_date=@expiry_date, "
cmd.Parameters.Add("@LOOSE_sent", SqlDbType.Int).Value = X.Cells(2).Value
sSQL += "LOOSE_sent=LOOSE_sent@, "
cmd.Parameters.Add("@LOOSE_received", SqlDbType.Int).Value = X.Cells(3).Value
sSQL += "LOOSE_received=@LOOSE_received "
cmd.Parameters.Add("@lti_no", SqlDbType.Int).Value = transferno
sSQL += "WHERE lti_no=@lti_no"
要打破上面的代码,我要做的是初始化我的命令字符串sSQL
然后我在其上构建更多,因为我添加了更多的sql变量cmd.Parameters.Add
。
我先添加item_code
作为sql变量添加它。我调用了这个变量@item_code
并将其声明为整数'SqlDbType.Int'并赋值为'X.Cells(4).Value'
cmd.Parameters.Add(“@ item_code”,SqlDbType.Int).Value = X.Cells(4).Value
接下来我将它添加到sSQL
sSQL + =“item_code = @item_code,”
我添加了一些空格,以便更容易地查看字符串,如果有什么事情困扰以便于调试。
这将确保如果值为空,它仍将正确运行。