我正在使用以下代码在表中插入数据,我在cmd.executenonquery()中收到错误....该异常标记为SQL异常,基础消息显示为“字符串或二进制数据将被截断。声明已被终止。“
Dim str As String ' defines str as a string variable
'takes insertion query as a string in str variable
str = "Insert into Instructors Values(@inst_id, @inst_name, @contact, @game, 'N/A', 'N/A', 'Available')"
'defines a new command which takes query string and connection string as parameters
Dim cmd As New SqlCommand(str, con)
' defines Instructor ID parameter and takes its value from the form
Dim prmInstID As New SqlParameter("@inst_id", SqlDbType.Int)
prmInstID.Value = TxtInstID.Text
' defines Instructor Name parameter and takes its value from the form
Dim prmInstName As New SqlParameter("@inst_name", SqlDbType.Char)
prmInstName.Value = TxtInstName.Text
' defines Contact parameter and takes its value from the form
Dim prmContact As New SqlParameter("@contact", SqlDbType.VarChar)
prmContact.Value = MskdTxtCntctno.Text
' defines Specialty Game parameter and takes its value from the form
Dim prmGame As New SqlParameter("@game", SqlDbType.VarChar)
prmGame.Value = Me.ComboBox1.SelectedItem
cmd.Parameters.Add(prmInstID)
cmd.Parameters.Add(prmInstName)
cmd.Parameters.Add(prmContact)
cmd.Parameters.Add(prmGame)
cmd.ExecuteNonQuery()
con.Close()
答案 0 :(得分:0)
当数据库中的文本字段太小而无法容纳要插入的数据时,通常会发生此异常。例如,如果数据库中的讲师名称字段长度为10(字符)且TxtInstName.Text
中的文本超过10个字符,则会出现此错误。
要解决此问题,您可以将数据库中的字段设置得更大,或者在表单中检查文本不会太长。
答案 1 :(得分:0)
正如aKzen所说,错误信息可能是因为您试图插入一些太长而无法放入某个字段的内容。
我只是想我会添加一些指针,因为我认为你还在学习等等。如果你使用存储过程,你可以大量减少代码,并提高应用程序的效率。
存储过程为您带来一些好处,它们更安全,因为您不通过网络传输查询(如果有人拦截您的查询,他们可以获得有关您的表结构的知识)此外,存储过程不必每次都重新编译执行它们不像传递查询字符串,服务器每次收到查询时都必须编译查询。此外,使用SP可以在多个位置重复使用相同的查询,而无需复制粘贴queryString。
以下是编写代码的方法。
' Declare a new command
Dim cmd As New SqlCommand
' Set the type to Stored Proc and Tell it which connection to use
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "spMySpNameGoesHERE"
cmd.Connection = con
' Add the parameter and its value
cmd.Parameters.AddWithValue("@ParamName",TxtInstID.Text )
' More Params go here
cmd.ExecuteNonQuery()
con.Close()
CREATE PROCEDURE spMySpNameGoesHERE
(
@inst_id INT,
@inst_name VARCHAR(50),
etc etc
)
AS
BEGIN
Insert into
Instructors
Values(@inst_id, @inst_name, @contact, @game, 'N/A', 'N/A', 'Available')
END
答案 2 :(得分:0)
此错误是因为您在一个或多个字段中输入的字符数大于数据库表列的大小。
例如,如果表中的名称列具有VARCHER(10)数据类型和长度。 如果在名称列中输入超过10个字符,则会收到此错误。
解决方案:
增加列的长度。例如25或达到您的要求。
和
限制文本框中的字符数,如果它是文本框,请说MaxLength="25"
。