繁体   English   中英

将Null值插入SQL表

[英]Inserted Null values into SQL table

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

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

    }                

您需要了解null (在编程中使用)与Database值null有所不同。

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

尝试这个:

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

使用int? yr int? yr而不是int yr

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

参考: 将空值插入到SQL Server中的int列

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

create table #test(
  ID int null
)

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

drop table #test

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM