2010-12-02 7 views
0

나는 집에서 만드는 시험을 위해 포럼에서 일하고 있는데, 나는 방금 이상한 문제를 발견했다. 게시물 내용을 위해 만들어진 텍스트 영역에 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자를 갖는 것으로 정의되었습니다.

+1

질문은 꽤 모호합니다. 그러나 정확한 오류 메시지는이 질문을 개선하는 좋은 출발점이 될 것입니다. – rtpHarry

+2

데이터가 데이터베이스에 삽입되면 OK로 인해 제약 조건 예외가 발생하지 않습니다. 읽는 것 이상을하고 있습니까? – Oded

+0

오류 세부 정보를 추가했습니다. – Stjerneklar

답변

2

지금까지 볼 수 있듯이 TableAdapter를 한 번 만든 다음 db의 테이블 스키마를 변경하여 열에 더 많은 문자를 사용할 수 있습니다. 이 경우 테이블 어댑터로 이동하여 비주얼 편집기에서 열을 선택하고 속성 (MaxLength)을 편집하십시오.

TableAdapters를 사용하고 있습니다. TableAdapters는 데이터 액세스를 빠르게 만드는 방법이지만 매우 어렵습니다 ... 사용을 중지하고 일반 ADO.NET 코어 (DataAdapters, DataReaders 등)로 전환하는 것이 좋습니다.

희망이 있습니다.

+0

ADO.NET +1, 나는 한 걸음 더 나아가 EF4와 함께 갈 것입니다. –

1

무엇이 원인인지 모르겠지만 ConstraintException이 발생하면 무엇이 잘못되었는지에 대한 구체적인 지침은 errors in your DataTable을 참조해야합니다.

그리고 오류가있는 행을 찾으면 각 행의 RowError 속성을 검사하여 문제가 무엇인지 정확하게 확인할 수 있습니다.

관련 문제