如何解析System.Data.SqlClient.SqlException:字符串或二进制数据将被截断

时间:2016-09-06 06:36:20

标签: c#

当我执行代码时,会出现此错误消息:

protected void Button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(str);

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Companyregister";
    cmd.Parameters.AddWithValue("@Company_name", txtname.Text);
    cmd.Parameters.AddWithValue("@Register_no", txtreg_no.Text);
    cmd.Parameters.AddWithValue("@Type", DropDownList1.Text);
    cmd.Parameters.AddWithValue("@Address", txtadrs.Text);
    cmd.Parameters.AddWithValue("@Email", txtemail.Text);
    cmd.Parameters.AddWithValue("@Contact_no", txtphone.Text);

    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    Response.Write("Register succesful");
}

错误:

  

类型' System.Data.SqlClient.SqlException'的异常发生在System.Data.dll中但未在用户代码中处理

     

附加信息:字符串或二进制数据将被截断。

     

声明已经终止。

导致此异常的代码或存储过程出了什么问题?如何解决?

3 个答案:

答案 0 :(得分:2)

一个或多个输入值比指定的列长度长。列太小或输入太长。

您可以通过以下两种方式解决问题:

  • 将输入始终传递给SQL

    cmd.Parameters.AddWithValue("@Company_name", txtname.Text.Substring(0, COLUMN_LENGTH));

  • 限制您的输入字段。(文本框最大长度) 我更喜欢,因为存储数据时用户输入永远不会更改。此外,还会向用户发出最大输入大小的警报。

答案 1 :(得分:0)

您尝试插入的数据(字符串或二进制)长于目标字段可能的最大长度。

答案 2 :(得分:-1)

检查数据库表中列/字段的大小。我猜,其中一个表字段的定义不足以保存传递的值。