字符串或二进制数据将被截断。 ASP VB.NET

时间:2015-07-24 15:06:31

标签: asp.net sql-server vb.net

错误是在下面的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)

1 个答案:

答案 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参数化上搜索更多内容。

祝你好运。