【问题标题】:How do i output more text?如何输出更多文本?
【发布时间】:2010-12-02 16:46:40
【问题描述】:

我正在一个自制的考试论坛上工作,我刚刚发现了一个奇怪的问题。 如果我在为帖子内容制作的文本区域中输入超过 50 个字符,则数据将提交到数据库,但是当我尝试显示帖子时,我的帖子对象由于约束异常而失败。

有人知道是什么原因造成的吗?

数据库中的字段是文本类型。

Line 139:            DataTable daldata = dalPosts.GetDataFirstPostInThreadId(id);
Line 140:
Line 141:            Post postObject = new Post(Convert.ToInt32(daldata.Rows[0]["id"]), Convert.ToInt32(daldata.Rows[0]["fk_user_id"]), Convert.ToInt32(daldata.Rows[0]["fk_thread_id"]), daldata.Rows[0]["contents"].ToString(), Convert.ToDateTime(daldata.Rows[0]["submissiondate"]), Convert.ToBoolean(daldata.Rows[0]["isdeleted"]));
Line 142:            return postObject;
Line 143:

错误详情:

System.Data.ConstraintException was unhandled by user code
  Message=Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
  Source=System.Data
  StackTrace:
       at System.Data.DataTable.EnableConstraints()
       at System.Data.DataTable.set_EnforceConstraints(Boolean value)
       at System.Data.DataTable.EndLoadData()
       at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
       at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
       at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
       at DALTableAdapters.PostTableAdapter.GetDataFirstPostInThreadId(Int32 threadid) in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\bp2010\62c352df\ee467897\App_Code.rvxbfwcl.5.cs:line 7570
       at DataBLL.PostBLL.ObjectFirstInThread(Int32 id) in c:\Users\Stjerneklar\Documents\My Dropbox\SP2010 Ballonparken\BP2010\App_Code\DataBLL\PostBLL.cs:line 139
       at DataBLL.Thread..ctor(String name, Int32 id, Int32 fk_category_id) in c:\Users\Stjerneklar\Documents\My Dropbox\SP2010 Ballonparken\BP2010\App_Code\DataBLL\ThreadBLL.cs:line 67
       at DataBLL.threadBLL.SelectByCategoryId(Int32 fk_category_id) in c:\Users\Stjerneklar\Documents\My Dropbox\SP2010 Ballonparken\BP2010\App_Code\DataBLL\ThreadBLL.cs:line 176
       at ForumThreads.createThread(Object sender, EventArgs e) in c:\Users\Stjerneklar\Documents\My Dropbox\SP2010 Ballonparken\BP2010\ForumThreads.aspx.cs:line 49
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: 

我在相关表格中没有其他可能影响事物的内容,如果我缩短文本一切正常。

编辑: 最后想通了(交作业前一晚) 违规字段被定义为我的数据集中的最大长度为 50 个字符。

【问题讨论】:

  • 这个问题很模糊,但确切的错误信息将是改进这个问题的一个很好的起点
  • 如果数据已经插入数据库OK,读取永远不会导致约束异常。你做的不仅仅是阅读吗?

标签: .net asp.net forum n-tier-architecture


【解决方案1】:

据我所知,您有可能创建了一次 TableAdapter,然后更改了数据库中表的架构,从而允许列中包含更多字符。如果是这种情况,请转到表适配器,选择列(在可视化编辑器中)并编辑属性(MaxLength)。

您正在使用 TableAdapter。 TableAdapter 是一种创建数据访问的快速方法,但很难维护......我强烈建议停止使用它们并切换到普通的 ADO.NET 核心(DataAdapters、DataReaders 等)。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    我不知道是什么原因造成的,但是当您收到 ConstraintException 时,您应该始终查看errors in your DataTable 以获取有关问题原因的更具体指导。

    一旦您发现有错误的行,您就可以检查每一行的 RowError 属性,以确切了解问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 2020-01-21
      • 2018-05-19
      • 2015-06-06
      • 2011-08-30
      相关资源
      最近更新 更多