Введенные значения Null в таблицу SQL

У меня есть форма приложения Windows, и я хочу вставить значения текстового поля в базу данных sql, некоторые из них являются обязательными, другие могут вставлять нулевые значения. Но я не могу вставить нулевые значения (в случае int) в базу данных.

CREATE TABLE [dbo].[tblReg]( [Reg_ID] [int] IDENTITY(1,1) NOT NULL, [Sep_Status] [varchar](50) NOT NULL, [Pop_Grp] [varchar](50) NOT NULL, [Child_Address] [varchar](50) NULL, [Child_AgeYr] [int] NULL ) ON [PRIMARY] 

Это мой код c #

 private void Children_Save_Click(object sender, EventArgs e) { ss = SepStat.Text.ToString().Trim(); pg = PopGr.Text.ToString().Trim(); Add = ChildAdd.Text.ToString().Trim(); yr = Convert.ToInt32(ChildDOBYr.Text); createdid=SaveChilDetails(ss,pg,Add,yr); } public int SaveChilDetails(string ss, string pg,string Add,int yr) { string constring =Config.GetConnection(); using (SqlConnection con=new SqlConnection(constring)) { using (SqlCommand cmd = new SqlCommand("Insert into tblReg(Sep_Status,Pop_Grp,Child_Address,Child_AgeYr) output INSERTED.Reg_ID values(@ss,@pg,@Add,@yr)", con)) { cmd.Parameters.AddWithValue("@ss", ss); cmd.Parameters.AddWithValue("@pg", pg); if (Add == "") //Problems are here { cmd.Parameters.AddWithValue("@add", null); } else { cmd.Parameters.AddWithValue("@Add", Add); } if(yr==0) {cmd.Parameters.AddWithValue("@yr", null);} else {cmd.Parameters.AddWithValue("@yr", yr);} //*********************** if (con.State != ConnectionState.Open) con.Open(); int createid = (int)cmd.ExecuteScalar(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return createid; } } } 

Вам нужно понять, что null (используется в программировании) отличается от значения базы данных null .

если вы хотите вставить значение Null в таблицу базы данных, вам нужно использовать DBNull.Value

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

  if (!string.IsNullOrEmpty(Add)) { cmd.Parameters.AddWithValue("@Add", DBNull.Value); } else { cmd.Parameters.AddWithValue("@Add", Add); } 

Вы можете использовать NULLIF в своем запросе

NULLIF

Попробуй это

 public int SaveChilDetails(string ss, string pg,string Add,int yr) { string constring =Config.GetConnection(); using (SqlConnection con=new SqlConnection(constring)) { using (SqlCommand cmd = new SqlCommand("Insert into tblReg(Sep_Status,Pop_Grp,Child_Address,Child_AgeYr) output INSERTED.Reg_ID values(@ss,@pg,NULLIF(@Add,''),NULLIF(@yr,0))", con)) { cmd.Parameters.AddWithValue("@ss", ss); cmd.Parameters.AddWithValue("@pg", pg); cmd.Parameters.AddWithValue("@Add", Add); cmd.Parameters.AddWithValue("@yr", yr); if (con.State != ConnectionState.Open) con.Open(); int createid = (int)cmd.ExecuteScalar(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return createid; } } } 

редактировать

вы получаете ошибку: строка ввода не была в правильном формате.

вам нужно использовать Int.TryParse

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

  public int SaveChilDetails(string ss, string pg,string Add,int yr) { string constring =Config.GetConnection(); using (SqlConnection con=new SqlConnection(constring)) { using (SqlCommand cmd = new SqlCommand("Insert into tblReg(Sep_Status,Pop_Grp,Child_Address,Child_AgeYr) output INSERTED.Reg_ID values(@ss,@pg,NULLIF(@Add,''),NULLIF(@yr,0))", con)) { cmd.Parameters.AddWithValue("@ss", ss); cmd.Parameters.AddWithValue("@pg", pg); cmd.Parameters.AddWithValue("@Add", Add); cmd.Parameters.AddWithValue("@yr", yr); if (con.State != ConnectionState.Open) con.Open(); int createid = (int)cmd.ExecuteScalar(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return createid; } } } 

Обновить

Попробуй это

 private void Children_Save_Click(object sender, EventArgs e) { int result=0; ss = SepStat.Text.ToString().Trim(); pg = PopGr.Text.ToString().Trim(); Add = ChildAdd.Text.ToString().Trim(); if(int.TryParse(ChildDOBYr.Text,out result)) { yr=ChildDOBYr.Text; } else { yr=result; } createdid=SaveChilDetails(ss,pg,Add,yr); } 

Использовать int? yr int? yr вместо int yr

 parameters.Add(""@yr"", yr.HasValue ? yr.Value : (object)DBNull.Value); 

Ссылка: введите значение null в столбец int в sql-сервере

Запустите этот запрос, и вы узнаете, как он работает.

 create table #test( ID int null ) insert into #test(ID)values(NUll) select * from #test drop table #test 
  • Исключение null SqlDataReader
  • Отображение результатов поиска базы данных в Datagridview
  • «Строка ввода не была в правильном формате». При попытке добавить новую запись в базу данных
  • Список (из T) и DataTable для заполнения базы данных
  • Использование timestamp из sqlserver в инфраструктуре сущности, чтобы получать изменения, а не перезагружать всю таблицу / представление
  • Как установить формат даты из формы VB.NET
  • Схема базы данных учетных записей
  • Форма Windows плюс активный каталог
  • Уведомлять клиентов, когда данные обновляются в базе данных
  • Подключение к файлу mdf базы данных sql-сервера без установки SQL-сервера на клиентской машине?
  • SQL, как форматировать время, содержащее агрегат или подзапрос
  • Давайте будем гением компьютера.