【发布时间】: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