Введенные значения 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 
  • Загрузка данных из базы данных в поле со списком с помощью другого потока
  • Как уменьшить время поиска на сервере Sql
  • Измените строку подключения приложения формы Windows C # на другой компьютер
  • Как вернуть несколько значений базы данных в текстовые поля?
  • Где переносить данные с SQL Server?
  • Обновление базы данных с помощью формата даты
  • Как реализовать автозаполнение в C # и SQL Server и стоит ли это?
  • Способы обработки различных ограничений типа данных в «текстовом поле», которые поступают из SQL Server - C # Winforms
  • Создание SqlDataAdapter / Datareader «действительно доступно только для чтения»
  • Проверка параллелизма с платформой Entity Framework и хранимыми процедурами
  • Добавление SQL Server в список серверов в диалоговом окне интерфейса Microsoft Connection
  • Давайте будем гением компьютера.