我有一个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;
}
}
}
答案 0 :(得分:2)
您可以在查询中使用 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);
答案 3 :(得分:0)
运行此查询,您就会知道它是如何工作的。
create table #test(
ID int null
)
insert into #test(ID)values(NUll)
select * from #test
drop table #test