2014-03-19 43 views
1

我有一個Windows應用程序窗體,我想插入文本框值到SQL數據庫,其中一些是強制性的,其他人被允許插入空值。但我不能在數據庫中插入空值(在int的情況下)。插入空值到SQL表中

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; 
      } 
     } 
    } 
+2

爲什麼你必須在默認情況下傳遞null null? –

+0

但它沒有采取默認空值在int的情況下 – neel

+0

我認爲問題是在轉換Int部分 – neel

回答

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); 

    }     
+0

我認爲問題在於轉換Int部分 – neel

+0

你得到了什麼錯誤 –

+0

輸入字符串的格式不正確。 – neel

2

您需要了解null(用於編程)與數據庫值null不同。

如果要插入Null值到數據庫表中,你需要使用DBNull.Value

試試這個:

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

運行這個查詢,你會知道它是如何工作的。

create table #test(
    ID int null 
) 

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

drop table #test 
+0

並使用DBNull.Value從存儲過程傳遞null值 –