字符串或二进制数据将被截断。该语句已终止

时间:2012-01-02 08:53:51

标签: sql vb.net

添加新数据时总是出错。错误说

  

字符串或二进制数据将被截断。该声明已被终止

我回顾了我的后端或代码。看起来在一列中添加TWO LABEL DATA会发生冲突,因为我想加入(年) - (学生编号)

这是我的INSERT INTO语句的代码

  INSERT INTO
     [Student_Information] (StudentID, LastName, FirstName, MiddleName, Gender, 
                            ContactNumber, Citizenship, Religion, Birthday, Address) 
  VALUES 
     ( '" & lbl_cyear.Text - studid.Text & "','" + txt_lname.Text + "', '" + txt_fname.Text + "', '" + txt_mname.Text + "', '" + DDGender.Text + "', '" & txt_cnumber.Text & "', '" & txt_citizenship.Text & "' , '" + txt_religion.Text + "' , '" & txt_bday.Text & "', '" & txt_address.Text & "' )"

以下是我如何生成年份和学生编号的代码

Sub SNYear()
    Dim test As Date

    test = Convert.ToDateTime(Today)
    lbl_cyear.Text = test.Year
End Sub
Sub SNGenerate()
    'displaying Studentid
    Dim SN As Integer ' Student Number
    Dim SID As String 'Student ID Num as String

    Dim rdr As SqlDataReader

    cmd1.Connection = cn
    cmd1.Connection.Open()
    cmd1.CommandText = "Select Max (StudentID) as expr1 from [Student_Information]"
    rdr = cmd1.ExecuteReader

    If rdr.HasRows = True Then
        rdr.Read()
    End If

    If rdr.Item(0).ToString = Nothing Then
        SN = rdr.Item(0) + 1
        SID = Format(SN, "0000")
    ElseIf rdr.Item(0).ToString = 0 Then
        SN = rdr.Item(0) + 1
        SID = Format(SN, "0000")

    Else
        SN = rdr.Item(0) + 1
        SID = Format(SN, "0000")
    End If


    studid.Text = SID

    cmd1.Connection.Close()

End Sub

有人可以帮我处理代码吗?如何将2个数据连接到不同的标签文本中,并将其保存到表格中的一列中。

2 个答案:

答案 0 :(得分:8)

哇!永远不要写那样的SQL查询。它受到危险的SQL注入,并且像这样的代码实际上被用作SQL注入讲座中的最坏情况!@ / p>

话虽如此,错误消息字符串或二进制数据将被截断。该声明已经终止。实际上说明了什么是错的。您正在尝试将过多数据插入到具有特定维度的字段中。

您正尝试将以下表达式插入StudentID字段:

lbl_cyear.Text - studid.Text

我甚至不确定你想在那里做什么。由于Visual Basic在默认情况下是松散类型的,因此它可能会将lbl_cyear.Text作为数字处理,并尝试从中减去studid.Text (作为数字)。你可能意思是这样的:

lbl_cyear.Text & "-" & studid.Text

您似乎正在尝试将StudentID列用于两种不同类型的信息。不要那样做。确定学生ID的一种格式,并为其标注列。

这是家庭作业吗?

答案 1 :(得分:2)

Y @ atornblad有一些关于重构代码的非常有效的观点。但是,您询问的具体问题可能是因为您试图将数据插入到比列可以接受的列更长的列中。

E.g。 - 您正尝试将“Lorem Ipsum”插入到最大长度为5个字符的列中。

修改 您需要再次查看表的定义方式,并确保它适合您存储的数据。另外 - 确保您尝试存储的数据格式正是表格所设计的格式。不要认为它是你想要的格式,实际上是在调试模式中逐步执行程序,看看变量在发送到数据库之前是什么。