Как вывести больше текста? - PullRequest
0 голосов
/ 02 декабря 2010

Я работаю на домашнем форуме для экзамена, и я только что обнаружил странную проблему.Если я ввожу более 50 символов в текстовое поле, созданное для содержимого публикации, данные передаются в базу данных, но когда я пытаюсь показать сообщение, мой объект публикации завершается неудачей из-за исключения из ограничения.

кто-нибудь знает, чтоэто может быть причиной?

поле в базе данных имеет тип text.

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 символов в моем наборе данных.

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

Насколько я вижу, возможно, что вы создали TableAdapter один раз, а затем изменили схему таблицы в БД, допуская больше символов в столбце. В этом случае перейдите к адаптеру таблицы, выберите столбец (в визуальном редакторе) и измените свойства (MaxLength).

Вы используете TableAdapters. TableAdapters - это быстрый способ создания доступа к данным, но его очень сложно поддерживать ... Я настоятельно рекомендую прекратить их использование и переключиться на обычное ядро ​​ADO.NET (DataAdapters, DataReaders и т. Д.).

Надеюсь, это поможет!

1 голос
/ 02 декабря 2010

Я не знаю, что является причиной этого, но когда вы получаете ConstraintException, вы всегда должны смотреть на ошибки в вашей DataTable для более подробного руководства о том, что пошло не так.

И как только вы нашли строки с ошибками, вы можете проверить свойство RowError каждого из них, чтобы точно определить, в чем заключалась проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...