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

データがデータベースに挿入されていれば、読み取りによって制約例外は発生しません。あなたは読書以上のことをしていますか? – Oded

+0

エラーの詳細を追加しました。 – Stjerneklar

答えて

2

私が見る限り、TableAdapterを一度作成してから、db内のテーブルのスキーマを変更して、列内の文字数を増やすことができます。このような場合は、テーブルアダプタに移動し、ビジュアルエディタで列を選択してプロパティ(MaxLength)を編集します。

TableAdaptersを使用しています。 TableAdapterはデータアクセスを作成するための簡単な方法ですが、操作が非常に難しいので、使用をやめて、通常のADO.NETコア(DataAdapters、DataReadersなど)に切り替えることを強くお勧めします。

希望すると助かります!

+0

+1 ADO.NETのために、私はそれをさらに進歩させ、EF4 –

1

何が原因なのか分かりませんが、ConstraintExceptionが発生した場合は、何が問題になったかについての具体的なガイダンスについては、常にerrors in your DataTableをご覧ください。

エラーが発生した行を見つけたら、それぞれのRowErrorプロパティを調べて、問題の内容を正確に調べることができます。

関連する問題