【问题标题】:insert statement sql vb插入语句sql vb
【发布时间】:2015-10-01 21:18:34
【问题描述】:

当组合框项为“ذكر”时,插入语句有问题,它工作正常,但当组合框项为“انثي”时,它不起作用并给出此消息

*字符串或二进制数据将被截断。

*语句已终止。

Dim char1 As String
Dim char2 As String = TextBox7.Text.Substring(0, 4)
Dim char3 As String = Label29.Text
'******************* تاريخ انتهاء صلاحية الشهادة الصحية'
If TextBox9.Text.Length = 10 Then
    HealthyIssue = TextBox9.Text
    HealthyExpire = HealthyIssue.AddDays(364)
    If ComboBox2.SelectedItem = "انثي" Then
        char1 = 2
        TextBox18.Text = char1 & char2 & char3
    ElseIf ComboBox2.SelectedItem = "ذكر" Then
        char1 = 1
        TextBox18.Text = char1 & char2 & char3
    End If

    Dim connString As String = "...................."
    Dim myConnection As SqlConnection = New SqlConnection(connString)
    myConnection.Open()
    Dim ss As String
    ss = "INSERT INTO PersonalData ([Name], [IDNo], [Gender], [PlaceOfWork],[birthPlace], [PassportNo], [Nationality], [SocialState], [Occupation], [Mobile], [VisaNo], [VisaIssueDate], [VisaExpireDate], [EntryDate], [HealthyIssueDate], [HealthyExpireDate], [ContractIssue], [Guarantor], [Guarantorplace], [GuarantorPhoneNo], [Note]) VALUES (@Name, @IDNo, @Gender,  @PlaceOfWork, @birthPlace, @PassportNo, @Nationality, @SocialState, @Occupation, @Mobile, @VisaNo, @VisaIssueDate, @VisaExpireDate, @EntryDate, @HealthyIssueDate, @HealthyExpireDate, @ContractIssue, @Guarantor, @Guarantorplace,  @GuarantorPhoneNo, @Note) "
    Dim cmdd As SqlCommand = New SqlCommand(ss, myConnection)
    cmdd.Parameters.AddWithValue("@Name", TextBox1.Text)
    cmdd.Parameters.AddWithValue("@IDNo", TextBox18.Text)
    cmdd.Parameters.AddWithValue("@Gender", ComboBox2.SelectedItem)
    cmdd.Parameters.AddWithValue("@PlaceOfWork", TextBox19.Text)
    cmdd.Parameters.AddWithValue("@birthPlace", TextBox7.Text)
    cmdd.Parameters.AddWithValue("@PassportNo", TextBox6.Text)
    cmdd.Parameters.AddWithValue("@Nationality", ComboBox3.Text)
    cmdd.Parameters.AddWithValue("@SocialState", TextBox8.Text)
    cmdd.Parameters.AddWithValue("@Occupation", ComboBox4.Text)
    cmdd.Parameters.AddWithValue("@Mobile", TextBox5.Text)
    cmdd.Parameters.AddWithValue("@VisaNo", TextBox14.Text)
    cmdd.Parameters.AddWithValue("@VisaIssueDate", TextBox15.Text)
    cmdd.Parameters.AddWithValue("@VisaExpireDate", TextBox16.Text)
    cmdd.Parameters.AddWithValue("@EntryDate", TextBox17.Text)
    cmdd.Parameters.AddWithValue("@HealthyIssueDate", TextBox9.Text)
    cmdd.Parameters.AddWithValue("@HealthyExpireDate", HealthyExpire)
    cmdd.Parameters.AddWithValue("@ContractIssue", TextBox10.Text)
    cmdd.Parameters.AddWithValue("@Guarantor", TextBox11.Text)
    cmdd.Parameters.AddWithValue("@Guarantorplace", TextBox12.Text)
    cmdd.Parameters.AddWithValue("@GuarantorPhoneNo", TextBox13.Text)
    cmdd.Parameters.AddWithValue("@Note", TextBox19.Text)
    cmdd.ExecuteNonQuery()
    cmdd.Dispose()

【问题讨论】:

  • 您能否说明错误发生在代码中的哪个位置?

标签: sql vb.net combobox


【解决方案1】:

对于与 SQL 表相关的错误,通常最好在您的问题中提供表定义(或其相关部分)。根据您现在的问题...

有效的好像是 3 个字符,无效的好像是 4 个字符。

您的列可能定义为 NVARCHAR(3) 或 NCHAR(3)。

如果定义为更宽,则您的数据库列类型可能是 CHAR 或 VARCHAR,而不是 NCHAR 或 NVARCHAR。

“ذكر”的 Unicode 表示形式中的字节数足够短,可以容纳指定的存储量,但“انثي”中的字节数却不是。

【讨论】:

    【解决方案2】:

    问题是列长度不等于来自combobox 项目的字符串。

    纠正的两种方法是修改表结构以调整该输入的列长度,或验证用户输入仅为 3 个字符。

    一点建议,最好使用STORED PROCEDURE,因为内联 SQL 语句容易受到 SQL 注入攻击。特别是当您在查询中传递STRING 时。

    另外,如果想避免意外结果或错误,只需使用.Parameters.AddWithValue最小化,因为在那种过程中,数据类型参数定义不好,你可以使用.Parameters.Add替换它,然后你可以定义数据类型。

    类似:

        .Parameters.Add("@ParameterName", DataType, Lenght).Value = ValueHere
    
        .Parameters.Add("@IDNo", SqlDbType.Int, 5).Value = TextBox18.Text
    

    如果在编码中使用最佳实践,我们总是可以避免意外的结果和错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多