【问题标题】:String or binary data would be truncated. The statement has been terminated字符串或二进制数据将被截断。该语句已终止
【发布时间】:2012-01-31 16:59:00
【问题描述】:

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

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

我回顾了我的后端或代码。在一列中添加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 个数据并将其保存到我的表中的一列中。

【问题讨论】:

  • 为你重新标记了这个问题。问题与 Visual Basic 和 SQL 有关——根本与 ASP.NET 无关。
  • 您的意思是将StudentID 设置为lbl_cyear.Text - studid.Text

标签: sql vb.net


【解决方案1】:

哇!永远不要写这样的 sql 查询。它受到危险的 SQL 注入的影响,而这样的代码实际上在各地的 SQL 注入讲座中被用作最坏的情况!

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

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

lbl_cyear.Text - studid.Text

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

lbl_cyear.Text & "-" & studid.Text

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

这是家庭作业吗?

【讨论】:

  • 是的,这是一个家庭作业。顺便说一句,我使用“-”分隔而不是操作。正如要求所说。学号应该由“年级-学号”组成,那我该怎么办。你能帮帮我吗?
  • 是的,但是按照您的代码编写方式,它一种操作。为了帮助您继续进行此操作,您应该查看很多小事情,并且它需要与 stackoverflow 问题不同的设置...
【解决方案2】:

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

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

编辑 您需要再看看您的表是如何定义的,并确保它适合您存储的数据。另外 - 确保您尝试存储的数据采用表格设计的正确格式。不要假设它是您想要的格式,实际上是在调试模式下单步执行程序,并在将变量发送到数据库之前查看变量是什么。

【讨论】:

  • 没错,但我的最大长度为 50 个字符,而我仅输入的值约为 9 个字符:\
猜你喜欢
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
相关资源
最近更新 更多