[英]Data is inserted in this table but the datagridview shows as null values
[英]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
尝试这个
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);
运行此查询,您将知道它是如何工作的。
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.