Введенные значения 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; } } }
- как получить следующее значение автоинкремента в sql
- Размер изображения при сохранении его в базе данных
- Отображать значение из базы данных в TextBox
- Самый быстрый способ узнать, доступен ли SQL Server
- Лучшая практика строки подключения SQL #
- Как синхронизировать базу данных и DataGridView
- Невозможно неявно преобразовать тип 'string' в 'System.Data.SqlClient.Sqlconnection'
- Список (из T) и DataTable для заполнения базы данных
- Winforms: Как загрузить изображение в базу данных SQL Server с помощью C #
- Возвращаемое значение вставленной строки
- Никакая строка не была удалена / обновлена, ошибка с SQL Server в C # (Winforms)
- Получать данные из других баз данных
- Уведомлять клиентов, когда данные обновляются в базе данных
Вам нужно понять, что 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