M Ridwan Dwi Septian Ответов: 5

Вставка null при отсутствии данных


когда я ввожу данные в sql server, Есть что-то, что обычно заполняется, а есть те, которые этого не делают, когда есть пустые данные, я хочу установить "NULL".

string query = "UPDATE MASTER_DOSEN SET NIP = '" + NIP
                + "', NIDN = '" + NIDN
                + "', GELAR_DEPAN = '" + GELAR_DEPAN
                + "', NAMA = '" + NAMA
                + "', GELAR_BELAKANG = '" + GELAR_BELAKANG
                + "', HOMEBASE = '" + HOMEBASE
                + "', KDPST = '" + KDPST
                + "', TMP_LAHIR = '" + TMP_LAHIR
                + "', TGL_LAHIR = '" + TGL_LAHIR
                + "', DOMISILI = '" + DOMISILI
                + "', ALAMAT = '" + ALAMAT
                + "', HANDPHONE = '" + HANDPHONE
                + "', EMAIL = '" + EMAIL + "' WHERE ID = '" + lblID_Dosen.Text.Trim() + "'";


Что я уже пробовал:

Я уже пробовал это сделать

if (NIP == "")
            {
                NIP = "NULL";
            }
            if (NIDN == "")
            {
                NIDN = "NULL";
            }
            if (GELAR_DEPAN == "")
            {
                GELAR_DEPAN = "NULL";
            }
            if (KDPST == "")
            {
                KDPST = "NULL";
            }
            if (TMP_LAHIR == "")
            {
                TMP_LAHIR = "NULL";
            }
            if (DOMISILI == "")
            {
                DOMISILI = "NULL";
            }

            clsSQLServer db = new clsSQLServer("SIDANG");
            string query = "UPDATE MASTER_DOSEN SET NIP = '" + NIP
                + "', NIDN = '" + NIDN
                + "', GELAR_DEPAN = '" + GELAR_DEPAN
                + "', NAMA = '" + NAMA
                + "', GELAR_BELAKANG = '" + GELAR_BELAKANG
                + "', HOMEBASE = '" + HOMEBASE
                + "', KDPST = '" + KDPST
                + "', TMP_LAHIR = '" + TMP_LAHIR
                + "', TGL_LAHIR = '" + TGL_LAHIR
                + "', DOMISILI = '" + DOMISILI
                + "', ALAMAT = '" + ALAMAT
                + "', HANDPHONE = '" + HANDPHONE
                + "', EMAIL = '" + EMAIL + "' WHERE ID = '" + lblID_Dosen.Text.Trim() + "'";
            int rec = db.SQLCommand(query);


когда я вижу в базе данных вот так
NIP = 'NULL'
NIDN = 'NULL'

И Т.Д.

Afzaal Ahmad Zeeshan

Разве отсутствие данных не является нулем? :-/ Просто убедитесь, что ваша таблица и столбцы могут принимать нулевые значения, если программа выдает исключение при сохранении NULL.

Зачем говорить платформе, чтобы она вставила ничего, когда ничего уже не вставляется?

5 Ответов

Рейтинг:
2

W∴ Balboos, GHB

TMP_LAHIR = "NULL"
Существует огромная разница между "нулем" и "нулем".

Первый - это жало персонажей, точно так же, как "Ой". Второе - это определенное значение, например, в SQL Server.

При реализации инструкции запроса вы заключаете значение в одинарные кавычки независимо от того, является ли оно реальным или нулевым, поэтому вы отправили серверу строку вместо NULL


Вам нужно обработать его так, чтобы у вас было значение "предварительно завернутое" в одинарные кавычки, если оно не равно NULL, и без одинарных кавычек, если оно есть. На самом деле я использую функцию для этого (php). Это будет выглядеть примерно так же, как в общем формате кода.
val = (val=='')?"NULL":"'val'";
Теперь, когда вы подключены к вашему запросу, добавляйте только val и не заключайте его в одинарные кавычки.


Рейтинг:
1

OriginalGriff

Не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

В качестве дополнительного бонуса, это также решит вашу проблему...


Рейтинг:
1

Patrice T

string query = "UPDATE MASTER_DOSEN SET NIP = '" + NIP
                + "', NIDN = '" + NIDN
                + "', GELAR_DEPAN = '" + GELAR_DEPAN
                + "', NAMA = '" + NAMA
                + "', GELAR_BELAKANG = '" + GELAR_BELAKANG
                + "', HOMEBASE = '" + HOMEBASE
                + "', KDPST = '" + KDPST
                + "', TMP_LAHIR = '" + TMP_LAHIR
                + "', TGL_LAHIR = '" + TGL_LAHIR
                + "', DOMISILI = '" + DOMISILI
                + "', ALAMAT = '" + ALAMAT
                + "', HANDPHONE = '" + HANDPHONE
                + "', EMAIL = '" + EMAIL + "' WHERE ID = '" + lblID_Dosen.Text.Trim() + "'";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
1

M.Kamran Asim

Проверьте значение null для переменной; если null, то используйте DbNull.Значение для вставки нулевого значения в БД


Рейтинг:
1

Ravi Gaur 11

использовать свела к нулю


string query = "UPDATE MASTER_DOSEN SET NIP = nullif('" + NIP + "', ''), 
                    NIDN = nullif('" + NIDN+ "', ''),  
                    GELAR_DEPAN = '" + GELAR_DEPAN
                + "', NAMA = '" + NAMA
                + "', GELAR_BELAKANG = '" + GELAR_BELAKANG
                + "', HOMEBASE = '" + HOMEBASE
                + "', KDPST = '" + KDPST
                + "', TMP_LAHIR = '" + TMP_LAHIR
                + "', TGL_LAHIR = '" + TGL_LAHIR
                + "', DOMISILI = '" + DOMISILI
                + "', ALAMAT = '" + ALAMAT
                + "', HANDPHONE = '" + HANDPHONE
                + "', EMAIL = '" + EMAIL + "' WHERE ID = '" + lblID_Dosen.Text.Trim() + "'";


Richard Deeming

Попробуйте прочитать другие решения. Вы скопировали чрезвычайно серьезную уязвимость системы безопасности из вопроса!