将Null值插入SQL表中

时间:2014-03-19 05:25:46

标签: c# sql sql-server winforms

我有一个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;
           }
       }
    }

4 个答案:

答案 0 :(得分:2)

您可以在查询中使用 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);

    }                

答案 1 :(得分:2)

您需要了解null(在编程中使用)与数据库值null不同。

如果要将Null值插入数据库表,则需要使用DBNull.Value

试试这个:

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

答案 2 :(得分:1)

使用int? yr代替int yr

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

参考:Insert a null value to an int column in sql server

答案 3 :(得分:0)

运行此查询,您就会知道它是如何工作的。

create table #test(
  ID int null
)

insert into #test(ID)values(NUll)
select * from #test

drop table #test