Странная проблема с sql server. Принятие нулевых значений во время

#c# #asp.net #sql-server #sql-server-2005

#c# #asp.net #sql-server #sql-server-2005

Вопрос:

Первый снимок экрана с ошибкой
Второй снимок экрана с ошибкой

Моя база данных принимает нулевые значения, которые противоречат определению таблицы. Смотрите снимки. Возможно ли это? Что я определяю столбцы как not null, и они могут принимать нулевые значения

Я вводил данные из asp.net сформируйте и определили, что эти значения будут равны нулю при загрузке страницы.

например, txtUser_id.Text =»»; . . .

Были сохранены только те значения, которые не были объявлены равными null, см. Снимок в приведенных выше ссылках.

Комментарии:

1. Выберите * ИЗ student в окне запроса SQL. Вы видите там две записи? Я думаю, вы просто видите новую запись, которую вы могли бы ввести в первом мгновенном снимке.

2. Спасибо. Я не знал (теперь я знаю) о пустой и нулевой строке.

3. Не могли бы вы отредактировать свой вопрос (заголовок), чтобы прояснить вопрос, который вы задаете? Также, пожалуйста, замените «снимок экрана» на «скриншот», поскольку моментальный снимок — это очень специфический термин, особенно для SQL Server.

Ответ №1:

Звездочка слева означает, что это новая строка, которая еще не сохранена, и именно тогда она будет проверена на соответствие определению таблицы.

Комментарии:

1. Звездочка в строке ‘new’ указывает на то, что все остальные перечисленные строки не были сохранены?

2. @Kenny Evitt: Нет. В программе просмотра «открытая таблица» SSMS появляется только одна новая строка

3. О! Я предположил, что соответствующая строка на первом скриншоте («snapshot») была той, в которой были данные! Я упоминал, что избегаю использования этого окна «открыть таблицу»?

4. @Kenny Evitt: я тоже … 🙂 Я бы предпочел использовать MS Access, хе-хе-хе

Ответ №2:

textbox.Text="" не является нулевым значением. Это пустая строка. Вставить его на sql server — это то же самое, что сказать Insert '' into...

Значения ‘null’ в вашей первой записи — это просто пустые строки. Если вы хотите отклонить пустые строки, выполните проверку против String.IsNullOrEmpty(txtUser_id.Text) на стороне C # или выполните проверку против rtrim(ltrim([insertedValue])) на стороне SQL.

Как упоминал @StriplingWarrior, нижняя строка (все нули) является просто заполнителем, пока не будут вставлены дополнительные записи.

Ответ №3:

При «Редактировании» таблицы в SQL Server Management Studio в нижней части вашего представления всегда есть строка, показывающая нулевые значения. Эта строка с нулевыми значениями фактически еще не существует в таблице вашей базы данных. Вот почему в левой части есть * выход. Это сделано для вашего удобства, чтобы вы могли легко вставлять значения. Как только вы введете значения, он проверит, чтобы убедиться, что столбцы не равны нулю, прежде чем фактически вставлять значения.

Если вы имеете в виду пустые значения в первой строке таблицы: empty — это не то же самое, что NULL. У вас нет ограничений для предотвращения ввода строк нулевой длины в эти столбцы, и это то, что произошло.

Ответ №4:

Я бы рекомендовал не использовать какой бы то ни было графический интерфейс «открытой таблицы» (я не знаю точного названия). Неясно, принимала ли ваша «база данных» NULL значения или эти столбцы имеют пустое строковое значение. Выполните следующий запрос в «окне запроса», чтобы сказать наверняка:

 SELECT * FROM dbo.Student;
  

Я бы также рекомендовал не использовать термин «снимок экрана» для обозначения того, что чаще называют «скриншотом», только потому, что «снимок экрана» — это очень специфический термин в SQL Server. [Сначала я думал, что вы опубликовали файл, содержащий снимок базы данных вместо изображений!]

Ваш ASP.NET код также может передавать пустые строки, как, кажется, указывает ваш пример кода.