错误是在下面的insert语句中引发的,其中数据库表中的dose_str字段或列具有例如值“Dose Strength is 200”。但是这会被拆分成列,转换为以下内容 我从SQL事件探查器得到的SQL语句:
insert into web_ship_detail (web_order_id, line_id, no_of_participants, Amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req) values (123,'B',0,0,900096,'Dose','strength', 'i', '200', 1)
但是,我想要的是将值“Dose strength is 200”作为Does_str列的一个值插入。 我不知道如何改变命令才能做到这一点。
每列的数据类型是: web_order_id数字(6,0) line_id char(1) no_of_participants数字(6,0) Amt_inventory数字(6,0) NSC_num数字(6,0) Dose_str varchar(20) Dose_unit varchar(2) Dose_form varchar(1) Dose_mult varchar(10) amt_req数字(6,0) amt_shipped数字(6,0)
除Dose_Mult和amt_shipped外,它们都不允许为null。 -
myCommand.CommandText = "insert into web_ship_detail (web_order_id, line_id, no_of_participants, Amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req) values (" & webOrderID & ",'" & obj.lineItem1.ToString & "'," & obj.NoOfParticipants1.ToString & "," & obj.AmtInInventory1.ToString & "," & obj.NSCNumber1.ToString & ",'" & obj.DoseStrength1.ToString & "','" & obj.DoseUnit1.ToString & "', '" & obj.DoseForm1.ToString.Substring(0, 1) & "', '" & obj.DoseMult1.ToString & "', " & obj.AmtRequested1.ToString & ")"
以下是整个方法:
For Each de As DictionaryEntry In GetCart()
Dim obj As OrderLineItem = CType(de.Value, OrderLineItem)
myCommand.CommandText = "insert into web_ship_detail (web_order_id, line_id, no_of_participants, Amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req) values (" & webOrderID & ",'" & obj.lineItem1.ToString & "'," & obj.NoOfParticipants1.ToString & "," & obj.AmtInInventory1.ToString & "," & obj.NSCNumber1.ToString & ",'" & obj.DoseStrength1.ToString & "','" & obj.DoseUnit1.ToString & "', '" & obj.DoseForm1.ToString.Substring(0, 1) & "', '" & obj.DoseMult1.ToString & "', " & obj.AmtRequested1.ToString & ")"
myCommand.ExecuteNonQuery()
Next de
修改1 下面是尝试使用SQL参数,但我仍然得到相同的错误,字符串或二进制数据将被截断,具有相同的值“剂量强度为200”
For Each de As DictionaryEntry In GetCart()
Dim obj As OrderLineItem = CType(de.Value, OrderLineItem)
myCommand.CommandText = "insert into web_ship_detail (web_order_id, line_id, no_of_participants, Amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req) values(@web_order_id, @line_id, @no_of_participants, @Amt_inventory, @NSC_num, @dose_str,@dose_unit, @dose_form, @dose_mult,@amt_req);"
myCommand.Parameters.AddWithValue("@web_order_id", webOrderID.ToString).SourceColumn = "web_order_id"
myCommand.Parameters.AddWithValue("@line_id", obj.lineItem1.ToString).SourceColumn = "line_id"
myCommand.Parameters.AddWithValue("@no_of_participants", obj.NoOfParticipants1.ToString).SourceColumn = "no_of_participants"
myCommand.Parameters.AddWithValue("@Amt_inventory", obj.AmtInInventory1.ToString).SourceColumn = "Amt_inventory"
myCommand.Parameters.AddWithValue("@NSC_num", obj.NSCNumber1.ToString).SourceColumn = "NSC_num"
myCommand.Parameters.AddWithValue("@dose_str", obj.DoseStrength1.ToString).SourceColumn = "dose_str"
myCommand.Parameters.AddWithValue("@dose_unit", obj.DoseUnit1.ToString).SourceColumn = "dose_unit"
myCommand.Parameters.AddWithValue("@dose_form", obj.DoseForm1.ToString.Substring(0, 1)).SourceColumn = "dose_form"
myCommand.Parameters.AddWithValue("@dose_mult", obj.DoseMult1.ToString).SourceColumn = "dose_mult"
myCommand.Parameters.AddWithValue("@amt_req", obj.AmtRequested1.ToString).SourceColumn = "amt_req"
myCommand.ExecuteNonQuery()
编辑2 我在下面添加了数据类型的大小,但我现在是一个不同的错误
For Each de As DictionaryEntry In GetCart()
Dim obj As OrderLineItem = CType(de.Value, OrderLineItem)
myCommand.CommandText = "insert into web_ship_detail (web_order_id, line_id, no_of_participants, Amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req) values(@web_order_id, @line_id, @no_of_participants, @Amt_inventory, @NSC_num, @dose_str,@dose_unit, @dose_form, @dose_mult,@amt_req)"
myCommand.Parameters.Add("@web_order_id", SqlDbType.Int, 6).Value = "web_order_id"
myCommand.Parameters.Add("@line_id", SqlDbType.Char, 1).Value = "line_id"
myCommand.Parameters.Add("@no_of_participants", SqlDbType.Int).Value = "no_of_participants"
myCommand.Parameters.Add("@Amt_inventory", SqlDbType.Int, 6).Value = "Amt_inventory"
myCommand.Parameters.Add("@NSC_num", SqlDbType.Int, 6).Value = "NSC_num"
myCommand.Parameters.Add("@dose_str", SqlDbType.VarChar, 20).Value = "dose_str"
myCommand.Parameters.Add("@dose_unit", SqlDbType.VarChar, 2).Value = "dose_unit"
myCommand.Parameters.Add("@dose_form", SqlDbType.VarChar, 1).Value = "dose_form"
myCommand.Parameters.Add("@dose_mult", SqlDbType.VarChar, 10).Value = "dose_mult"
myCommand.Parameters.Add("@amt_req", SqlDbType.Int, 6).Value = "amt_req"
myCommand.ExecuteNonQuery()
编辑3 下面是我得到的新错误,是否需要更改以使此代码有效?
错误消息:System.FormatException:无法将参数值从String转换为Int32。 ---> System.FormatException:输入字符串的格式不正确。
以下是插入声明
的一个场景 Declare @Web_Order_ID INT
SET @Web_Order_ID = 123
Declare @line_id CHAR(1)
SET @line_id = 'A'
Declare @no_of_participants INT
SET @no_of_participants = 0
Declare @Amt_inventory INT
SET @Amt_Inventory = 0
Declare @NSC_num INT
SET @NSC_num = 900096
Declare @dose_str VARCHAR(20)
SET @Dose_Str = 'Dose Strength is 200'
Declare @dose_unit VARCHAR(2)
SET @dose_unit = 'mg'
Declare @dose_form VARCHAR(1)
SET @dose_form = 'C'
Declare @dose_mult VARCHAR(10)
SET @dose_mult = '030'
Declare @amt_req INT
SET @amt_req = 200
insert into web_ship_detail (web_order_id, line_id, no_of_participants, Amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req)
values(@web_order_id, @line_id, @no_of_participants, @Amt_inventory, @NSC_num, @dose_str,@dose_unit, @dose_form, @dose_mult,@amt_req)
答案 0 :(得分:2)
除了SQL注入问题或任何最佳实践类型的东西,您的错误必须由插入一个/多个列的截断值引起。插入“dose_unit”列时抛出的错误。
您的查询:
insert into web_ship_detail (web_order_id, line_id, no_of_participants, Amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req) values (123,'B',0,0,900096,'Dose','strength', 'i', '200', 1)
,而你的表定义:
web_order_id numeric(6, 0) line_id char(1) no_of_participants numeric(6, 0) Amt_inventory numeric(6, 0) NSC_num numeric(6, 0) Dose_str varchar(20) Dose_unit varchar(2) Dose_form varchar(1) Dose_mult varchar(10) amt_req numeric(6, 0) amt_shipped numeric(6, 0)
您的查询尝试将 8个字符插入 Dose_unit ,其定义为 VARCHAR(2)强>
如果您发现错误来自,那么剩下的就是您管理参数的逻辑。
注意:如果您可以管理此错误,我建议您在其他人推荐的SQL参数化上搜索更多内容。
祝你好运。