Ошибка "Значение нарушает MaxLength" при изменении положения источника данных - PullRequest
1 голос
/ 27 мая 2020

, поэтому я использую Winforms, и я использовал источник данных, чтобы связать richTextBox с моей базой данных. Проблема в том, что значения этого столбца - nvarchar (1000). Поэтому я ограничил richTextBox 200 символами, надеясь, что этого будет достаточно, но при достаточном количестве шрифта, изменения цвета или китайских символов строка rtf может быть намного выше максимума для базы данных (1000). Я сделал так, чтобы невозможно было сохранить изменения с помощью кнопки сохранения в bindingNavigator, если значение слишком длинное, но когда я изменяю положение моего источника данных (с bindingNavigator), приложение вылетает со следующим сообщением:

Невозможно установить столбец "COLUMN_NAME". Значение нарушает ограничение MaxLength этого столбца.

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

Вот весь код (я создал проект для воссоздания проблемы).

public partial class FormTest : Form
{
    public FormTest()
    {
        InitializeComponent();
        this.TheFamousBinding();
    }

    public void TheFamousBinding()
    {
        Binding commentBinding = this.richTextBox1.DataBindings.Add("Rtf", this.myBindingSource, "Comment", true);
    }

    private void mODELSBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        this.Validate();
        this.myBindingSource.EndEdit();
        this.myTableManager.UpdateAll(this.myDataSet);

    }

    private void FormTest_Load(object sender, EventArgs e)
    {
        this.myTableAdapter.Fill(this.myDataSet.myTable);

    }
}

А вот трассировка стека

Exception levée: 'System.ArgumentException' dans System.Data .dll 'MyProject.exe' (CLR v4.0.30319: MyProject.exe): Chargé 'C: \ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Transactions.resources \ v4.0_4.0.0.0_fr_b77a5c561934e089 \ System .Transactions.resources.dll '. Le module a généré sans Symboles. 'MyProject.exe' (CLR v4.0.30319: MyProject.exe): Chargé 'C: \ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ mscorlib.resources \ v4.0_4.0.0.0_fr_b77a5c561934e089 \ mscorlib.resources.dll '. Le module a généré sans Symboles. System.Transactions Critical: 0: http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled Exception non pri charge en charge3DFlexAdmin.exeSystem.ArgumentException, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089Impossible de définir la columnne 'Comment'. La valeur dépasse la limit MaxLength de cette columnsne. à System.Data.DataColumn.CheckMaxLength (DataRow dr) à System.Data.DataTable.RaiseRowChanging (аргументы DataRowChangeEventArgs, DataRow eRow, DataRowAction eAction, логическое событие fireEvent) à System.Data.DataTable.SetNewRecordAction, DataRordRecordAction (действие DataRordNewRecord , Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exception & deferredException) à System.Data.DataRow.EndEdit () à System.Data.DataRowView.EndEdit ()
à System. Windows .Manorms. EndCurrentEdit () à System. Windows .Forms.CurrencyManager.ChangeRecordState (Int32 newPosition, логическая проверка, логическое endCurrentEdit, логическое firePositionChange, Boolean pullData) à System. Windows .Forms.CurrencyManager. Windows .Forms.BindingSource.set_Position (значение Int32) à System. Windows .Forms.BindingSource.MoveNext () à System. Windows .Forms.BindingNavigator.OnMoveNext (отправитель объекта, EventArgs e) à System. Windows .Forms.ToolStripItem.RaiseEvent (Объект ключ, EventArgs e) à System. Windows .Forms.ToolStripButton.OnClick (EventArgs e) à System. Windows .Forms.ToolStripItem.HandleClick (EventArgs e) à System. Windows .Forms.ToolStripItem.HandleM MouseEventArgs e)
à System. Windows .Forms.ToolStripItem.FireEventInteractive (EventArgs e, ToolStripItemEventType соответствует) à System. Windows .Forms.ToolStripItem.FireEvent (EventArgs e, ToolStripItem40) à System. .Forms.ToolStrip.OnMouseUp (значение MouseEventArgs) à System. Windows .Forms.Control.WmMouseUp (Сообщение & m, кнопка MouseButtons, щелчки Int32) à System. Windows .Forms.Control.WndPro c (Сообщение & m ) à System. Windows .Forms.ScrollableControl.WndPro c (Сообщение & m)
à System. Windows .Forms.ToolStrip.WndPro c (Сообщение & m) à System. Windows .Forms.Control.ControlNativeWindow.OnMessage (Message & m) à System. Windows .Forms.Control.ControlNativeWindow. WndPro c (Сообщение & m) à System. Windows .Forms.NativeWindow.DebuggableCallback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) à System. Windows .Forms.UnsafeNativeMethods.DispatchGMessage (MS) System. Windows .Forms.Application.ComponentManager.System. Windows .Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageL oop (IntPtr dwComponentID, причина Int32, Int32 pvLoopData) à System. Windows .FormApplication. .RunMessageLoopInner (причина Int32, контекст ApplicationContext) à System. Windows .Forms.Application.ThreadContext.RunMessageL oop (причина Int32, контекст ApplicationContext) à System. Windows .Forms.Application.Run (форма mainForm) à _3DFlexAdmin.Program.Main () dans C: \ Users \ ADMIN \ source \ repos \ MySolution \ MyProject \ Program.cs: строка 21System.ArgumentException: Impossible de définir la col onne 'Комментарий'. La valeur dépasse la limit MaxLength de cette columnsne. à System.Data.DataColumn.CheckMaxLength (DataRow dr) à System.Data.DataTable.RaiseRowChanging (аргументы DataRowChangeEventArgs, DataRow eRow, DataRowAction eAction, логическое событие fireEvent) à System.Data.DataTable.SetNewRecordAction, DataRordRecordAction (действие DataRordNewRecord , Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exception & deferredException) à System.Data.DataRow.EndEdit () à System.Data.DataRowView.EndEdit ()
à System. Windows .Manorms. EndCurrentEdit () à System. Windows .Forms.CurrencyManager.ChangeRecordState (Int32 newPosition, логическая проверка, логическое endCurrentEdit, логическое firePositionChange, Boolean pullData) à System. Windows .Forms.CurrencyManager. Windows .Forms.BindingSource.set_Position (значение Int32) à System. Windows .Forms.BindingSource.MoveNext () à System. Windows .Forms.BindingNavigator.OnMoveNext (отправитель объекта, EventArgs e) à System. Windows .Forms.ToolStripItem.RaiseEvent (Объект key, EventArgs e) à System. Windows .Forms.ToolStripButton.OnClick (EventArgs e) à System. Windows .Forms.ToolStripItem.HandleClick (EventArgs e) à System. Windows .Forms.ToolStripItem.HandleM MouseEventArgs e)
à System. Windows .Forms.ToolStripItem.FireEventInteractive (EventArgs e, ToolStripItemEventType met) à System. Windows .Forms.ToolStripItem.FireEvent (EventArgs e, ToolStripItemEvent) à System. *. .Forms.ToolStrip.OnMouseUp (значение MouseEventArgs) à System. Windows .Forms.Control.WmMouseUp (Сообщение & m, кнопка MouseButtons, щелчки Int32) à System. Windows .Forms.Control.WndPro c (Сообщение & m ) à System. Windows .Forms.ScrollableControl.WndPro c (Сообщение & m)
à System. Windows .Forms.ToolStrip.WndPro c (Message & m) à System. Windows .Forms .Control.ControlNativeWindow.OnMessage (Сообщение & m) à System. Windows .Forms.Control.ControlNativeWindow.WndPro c (Сообщение & m) à System. Windows .Forms.NativeWindow.DebuggableCallback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) à System. Windows. Forms.UnsafeNativeMethods.DispatchMessageW (MSG & msg) à System. Windows .Forms.Application.ComponentManager.System. Windows .Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageL oop (IntPtata pwiddwd) . Windows .Forms.Application.ThreadContext.RunMessageLoopInner (причина Int32, контекст ApplicationContext) à System. Windows .Forms.Application.ThreadContext.RunMessageL oop (причина Int32, контекст ApplicationContext) à System. Windows. Forms.Application.Run (Form mainForm) à MyProject.Program.Main () dans C: \ Users \ ADMIN \ source \ repos \ MySolution \ MyProject \ Program.cs: ligne 21 Исключение, не созданное для типа 'System.ArgumentException', является результатом System.Data.dll Невозможно определить столбец 'Комментарий'. La valeur dépasse la limit MaxLength de cette columnsne. Цитата

...