Оператор вставки не будет вставлять нулевое значение - PullRequest
4 голосов
/ 07 ноября 2011

Я пытаюсь вставить нулевое значение в мою базу данных из C # следующим образом:

SqlCommand command = new SqlCommand("INSERT INTO Employee
VALUES ('" + employeeID.Text + "','" + name.Text + "','" + age.Text
        + "','" + phone.Text + "','" + DBNull.Value + "')", connection);

DBNull.Value - это где дата может быть, но я бы хотел, чтобы она была равна нулю, нокажется, поставить дату по умолчанию, 1900 что-то ...

Ответы [ 6 ]

10 голосов
/ 07 ноября 2011

Использовать параметры.

SqlCommand command = new SqlCommand("INSERT INTO Employee VALUES 
            (@employeeID,@name,@age,@phone,@bdate)",connection);
....
command.Parameters.AddWithValue("@bdate",DBNull.Value);
//or
command.Parameters.Add("@bdate",System.Data.SqlDbType.DateTime).Value=DBNull.Value;

Или попробуйте это,

 SqlCommand command = new SqlCommand("INSERT INTO Employee 
         (employeeID,name,age,phone) VALUES 
                (@employeeID,@name,@age,@phone)",connection);
8 голосов
/ 07 ноября 2011

Изменить на:

SqlCommand command = new SqlCommand("INSERT INTO Employee VALUES ('" + employeeID.Text + "','" + name.Text + "','" + age.Text + "','" + phone.Text + "',null)", connection);

DBNull.Value.ToString() возвращает пустую строку, но вместо нее требуется значение null.

Однако этот способ построения вашего запроса может привести к проблемам. Например, если одна из ваших строк содержит кавычку, результирующий запрос выдаст ошибку. Лучше использовать параметры и установить их для объекта SqlCommand:

SqlCommand command = new SqlCommand("INSERT INTO Employee VALUES (@empId,@name,@age,@phone,null)", connection);
command.Parameters.Add(new SqlParameter("@empId", employeeId.Text));
command.Parameters.Add(new SqlParameter("@name", name.Text));
command.Parameters.Add(new SqlParameter("@age", age.Text));
command.Parameters.Add(new SqlParameter("@phone", phone.Text));
1 голос
/ 07 ноября 2011

если вы выведете "'" + DBNull.Value + "'", вы обнаружите, что это '', что означает, что вы вставляете пустую строку вместо нуля в БД.Итак, вы просто пишете ноль:

SqlCommand command = new SqlCommand("INSERT INTO Employee
VALUES ('" + employeeID.Text + "','" + name.Text + "','" + age.Text
        + "','" + phone.Text + "', null)", connection);
1 голос
/ 07 ноября 2011

Попробуйте это:

SqlCommand command = new SqlCommand();
command.ComandText = "insert into employee values(@employeeId, @name, @age, @phone, @someNullVal)";
command.Parameters.AddWithValue("@employeedId", employeedID.Text);
// all your other parameters
command.Parameters.AddWithValue("@someNullVal", DBNull.Value);

Это решает две проблемы. У вас явная проблема (с вставкой в ​​таблицу значения NULL) и SQL-инъекция потенциал.

1 голос
/ 07 ноября 2011

Измените DBNull.Value на литерал null для динамического SQL:

SqlCommand command = new SqlCommand("INSERT INTO Employee VALUES ('" + employeeID.Text + "','" + name.Text + "','" + age.Text + "','" + phone.Text + "',null)", connection);
0 голосов
/ 07 ноября 2011

попробуй вот так.

SqlCommand command = new SqlCommand("INSERT INTO Employee VALUES ('" + employeeID.Text + 
         "','" + name.Text + "','" + age.Text + "','" + phone.Text + "','Null')", connection);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...