Невозможно вставить значение NULL в столбец 'module_desc'

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

Невозможно вставить значение NULL в столбец 'module_desc', таблица 'E:\SVN WEBSITE COPIES\CIT\CIT5\APP_DATA\UNIDB.MDF.dbo.modules'; столбец не допускает пустых значений. ОБНОВЛЕНИЕ не проходит. Заявление было прекращено.

Ниже мой текущий код...

asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UniString %>"
    SelectCommand="SELECT [module_id], [module_name], [module_desc], [module_units] 
    FROM [modules]"

    UpdateCommand="UPDATE [modules] SET [module_name]= @Module_Name, [module_desc]=@Module_Description, 
    [module_units]=@Module_Units WHERE [module_id] = @Module_ID" >

<UpdateParameters>
    <asp:Parameter Name="Module_Name" Type="String" />
    <asp:Parameter Name="Module_Description" Type="String" />
    <asp:Parameter Name="Module_Units" Type="Int32" />
    <asp:Parameter Name="Module_ID" Type="Int32" />
</UpdateParameters>


</asp:SqlDataSource>

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="Module_ID">

Все кажется идеальным с точки зрения кода, поэтому я не уверен, как обойти эту проблему.

Любая помощь будет здорово...

RD


person ryanfc2    schedule 03.11.2015    source источник


Ответы (1)


Ваше сообщение об ошибке не требует пояснений, столбец module_desc не допускает нулевых значений. Либо вам придется разрешить нули в столбце, либо передать значение по умолчанию. Я подозреваю, что с вашим кодом происходит то, что пользователь вводит пустой текст, и по умолчанию элемент управления SqlDataSource преобразует его в Null. Вам нужно будет установить для свойства ConvertEmptyStringToNull значение false следующим образом:

<UpdateParameters>
  <asp:Parameter Name="Module_Name" Type="String" />
  <asp:Parameter Name="Module_Description" Type="String" ConvertEmptyStringToNull="false"/>
  <asp:Parameter Name="Module_Units" Type="Int32" />
  <asp:Parameter Name="Module_ID" Type="Int32" />
</UpdateParameters>

Это не преобразует пустой текст в Null и обновит сам пустой текст в базе данных вместо Null.

person Rahul Singh    schedule 03.11.2015
comment
Рахул, он по-прежнему вызывает ту же ошибку с добавленным фрагментом кода, там добавляются значения, например, когда я редактирую первый модуль и говорю, что пишу тест в поля и пытаюсь обновить его, выдает эту ошибку. . - person ryanfc2; 03.11.2015
comment
@ryanfc2 - Вы уверены, что не передаете пустую строку? Попробуйте запустить профилировщик сервера sql и посмотреть, какой запрос он передает. - person Rahul Singh; 03.11.2015
comment
Как мне это сделать? Я просто использую соединение sql для подключения к БД, затем использую представление списка для просмотра таблицы в базе данных, которую я хочу видеть, представление списка работает в том смысле, что оно отображает данные, которые я хочу, но когда я иду, чтобы отредактировать его и отправить изменения, которые он дает, эта ошибка, не уверен, почему он делает нуль, потому что, когда я обновляю описание, я добавляю больше данных к тому, что уже есть - person ryanfc2; 03.11.2015
comment
@ ryanfc2 - Да, пожалуйста, посмотрите какое-нибудь очень простое видео о том, как использовать профилировщик SQL-сервера, это действительно просто. Вы сможете определить проблему cz без этого никто не может помочь. - person Rahul Singh; 03.11.2015
comment
Кажется, я не могу найти эту функцию в своей копии VS 2015. Когда я добавляю нули, разрешенные в поле описания модуля, она работает, позволяя мне обновлять, но информация о описании модуля исчезает, и она не отображается. - person ryanfc2; 04.11.2015
comment
@ ryanfc2- На самом деле профилировщик сервера sql открывается из SSMS. - person Rahul Singh; 04.11.2015