【问题标题】:How can I resolve System.Data.SqlClient.SqlException: String or binary data would be truncated如何解决 System.Data.SqlClient.SqlException:字符串或二进制数据将被截断
【发布时间】:2016-09-06 06:36:20
【问题描述】:

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

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.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理

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

语句已终止。

我的代码或存储过程有什么问题导致此异常,我该如何解决?

【问题讨论】:

标签: c#


【解决方案1】:

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

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

  • 将输入始终经过 trucated 传递给 SQL

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

  • 限制您的输入字段。(文本框最大长度) 这是我更喜欢的,因为在存储数据时用户输入永远不会改变。用户也会收到关于最大输入大小的警告。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您可以从数据库中增加字段最大长度,也可以设置文本框最大长度类似于数据库字段最大长度
    • 不错的一个。这是给你的 +1 :)
    【解决方案3】:

    检查数据库表中列/字段的大小。我猜,其中一个表字段的定义不够大,无法容纳传递的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多