【问题标题】:String or binary data would be truncated. The statement has been terminated.[SqlException (0x80131904): String or binary data would be truncated字符串或二进制数据将被截断。语句已终止。[SqlException (0x80131904): 字符串或二进制数据将被截断
【发布时间】:2016-03-10 18:46:45
【问题描述】:

我已经搜索过答案说插入的值可能很长或数据类型不匹配,因为可能会出现这种类型的错误,但这个网络应用程序在我的本地系统上运行良好,但是当我在将它发布到后使用它时web,出现此错误,但所有其他网页插入查询都可以正常工作

错误仅显示在这一页上。

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

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:字符串或二进制数据将被截断。
声明已终止。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[SqlException (0x80131904): 字符串或二进制数据将被截断。
声明已终止。]
System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection,Action1 wrapCloseInAction) +388
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +717
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4515
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +61
System.Data.SqlClient.SqlDataReader.get_MetaData() +134
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6557689
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +6560327
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource
1 完成,Int32 超时,Task& 任务,布尔型异步写入)+586
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 方法) +104
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior行为,字符串方法)+288
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)+171
System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator 翻译器,EntityConnection 连接,Dictionary2 identifierValues, List1 generatedValues) +303
System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter 适配器) +485

[UpdateException:更新条目时出错。有关详细信息,请参阅内部异常。]

System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter 适配器) +4502203
System.Data.Objects.ObjectContext.SaveChanges(SaveOptions 选项)+583
System.Data.Entity.Internal.InternalContext.SaveChanges() +218

[DbUpdateException:更新条目时出错。有关详细信息,请参阅内部异常。]
System.Data.Entity.Internal.InternalContext.SaveChanges() +291
frm_addkarigar.btnadd_Click(Object sender, EventArgs e) +1672
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +155
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804

这是插入数据的c#代码

db_mytailorEntities _objdb = new db_mytailorEntities();
int count = _objdb.tbl_karigar.Where(obj => obj.name == txtname.Text).Count();

karigar.name = txtname.Text;
karigar.state = ddlstate.Text;
karigar.city = ddlcity.Text;
karigar.address = txtaddress.Text;
karigar.ph1 = txtph1.Text;
karigar.ph2 = txtph2.Text;
karigar.date_reg = DateTime.Now.ToString();
karigar.name = txtname.Text;

if (txtamntdue.Text == "")
    karigar.amount_due = 0;
else
    karigar.amount_due = int.Parse(txtamntdue.Text);

karigar.K_id = txtname.Text+"-"+(count+1);
karigar.foruser = Session\["userid"\].ToString().TrimEnd();

_objdb.tbl_karigar.Add(karigar);
_objdb.SaveChanges();

Response.Write("<script language>alert('Karigar added successful')</script>");][1]

【问题讨论】:

    标签: c# sql-server-2012


    【解决方案1】:

    此错误表明您尝试写入的数据对于其中一列来说太大了。它可以在本地工作,但不能在您的生产环境中工作,这可能是一些事情。您本地机器上的架构与您的生产环境是否相同?您知道正在写入的哪些数据会导致错误吗?

    【讨论】:

    • 这没有提供问题的答案。要请求作者澄清,请在其帖子下方发表评论。
    • 谢谢 - 很遗憾,我还不能让 cmets 回答问题,刚刚创建了这个个人资料。
    • @S.Akbari 不,我觉得这是一个完整的答案。它解释了错误是什么以及一些可能的事情来调查为什么它只发生在一个环境中。他可能应该指出的唯一一件事是 OP 应该开始查看 frm_addkarigar.btnadd_Click 第 1672 行,他有一个 SaveChanges() 调用正在抛出执行,无论要保存的对象都是具有以下字段的对象数据库太长了。
    【解决方案2】:

    我遇到了类似的错误,字符串或二进制数据将被截断,但它来自 SQL 表的 CRUD 权限被 DBA 删除。 所以我会查看连接字符串和网站(IIS)身份验证/模拟设置,如果没有其他工作。它适用于您的本地计算机,但不适用于 Web 服务器。因此,快速检查是在 IIS 模拟下或 web.config 连接字符串中输入您的凭据。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。就我而言,问题出在我没想到会出错的地方。我忘了让 id 成为“身份”,以便它是增量的。 是的,就是这么简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-21
        • 2012-01-31
        • 2018-03-28
        相关资源
        最近更新 更多