在C#程序中,怎么使用sql语句向数据库的一列中插入空值,但是该列也可能有值,这样的语句应该怎么写。

时间:2022-12-20 19:10:15
在C#程序中,怎么使用sql语句向数据库的一列中插入空值,但是该列也可能有值,这样的语句应该怎么写。

27 个解决方案

#1


如果是插入的话,数据库里面没有设置默认值

在插入语句里面不写那列就可以了,自动就是空值

如果是更新,可以用update table set columna=null

#2


insert into TableName(ColumnName) values(NULL);

#3


引用 2 楼 zxkid 的回复:
SQL codeinsertintoTableName(ColumnName)values(NULL);

#4


但是这列也有可能是有值的。就是说如果有值就要插入该值,没有的话就插入null。并不是就只插入null

#5


可以用parameter, 为空时设置为DBNull.Value

#6


你就让列默认为空不就行了

#7


update yourtable 
set columna = null
where columna is not null

#8


如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")"

#9


用变量的方式啊!

insert into tablename values "'+textbox.text.trim()+'" where 条件


textbox为空时,数据库表列中也为空,textbox不为空时,数据库表列中就是textbox的值!

#10


更新上面语句:
insert into tablename values '"+textbox.text.trim()+"' where 条件

#11


程序里边改怎么写就怎么写,数据库里设置默认值不就可以了

#12


我想问一下,你们都自己试过吗?

#13


很多人都没理解我的意思。我再说的清楚点。
假如说数据库中有两列 column1,column2 都是可空的。
现在我在程序里面定义了两个参数,string arg1,arg2。我现在就是想把arg1,arg2的值分别插入到column1,column2中。
也就是用insert tablename1 (column1,column2) values (arg1,arg2)   但是arg1,arg2如果没有值,那就是null,就把null插入到数据库的column1,column2中。

#14


引用 8 楼 GhostAdai 的回复:
如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")"


弄完好象整个语句都变成null了

#15


数据库中字段可为空的话,不用管它就是了。
如果是必填字段,又不保存值,可以用类型的MinValue字段,如DateTime.MinValue。

#16


引用 15 楼 smntbk 的回复:
数据库中字段可为空的话,不用管它就是了。 
如果是必填字段,又不保存值,可以用类型的MinValue字段,如DateTime.MinValue。

不是必填字段,但是该列可能是有值的。如果在程序里面赋值,而不去管他,那不就相当于值没插进,那就是错误了。

#17


引用 14 楼 xingqi_2002 的回复:
引用 8 楼 GhostAdai 的回复:
如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")" 
 

弄完好象整个语句都变成null了


怎么会呢?如果value不是null就返回value本身的值插入,如果是null就返回null值。为什么整个语句都变成null呢?不解。

#18


引用 17 楼 GhostAdai 的回复:
引用 14 楼 xingqi_2002 的回复:
引用 8 楼 GhostAdai 的回复: 
如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")" 


弄完好象整个语句都变成null了 
 

怎么会呢?如果value不是null就返回value本身的值插入,如果是null就返回null值。为什么整个语句都变成null呢?不解。


string t1 = null;
string t3 = "bbbb";
string cmd = @"Insert into t_table_dictionary_test (f_table_engname,f_table_chnname,f_validSign,f_table_Type,f_compareDb2,f_remark) values ('555','555','Y','555'," + t1 != null ? t1 : null + "," + t3 != null ? t3 : null + ")";

看看是这样吗?

#19


晕,我举的是个例子,最好使用参数形式,可以不用考虑不同类型的参数是否要用''、[]、##等等符号引起来的问题。比如像你这个句子里f_compareDb2如果是数字类型还没问题,如果是字符型就会出问题,因为t1 != null ? t1 : null两头没用''引起来,程序执行就会报格式不匹配的异常。

#20


好了。换了种方式。

#21


不过就是列数多的时候用起来不怎么方便。

#22


可能说得不是很清楚,给你举个例子。

string sql = "insert into TableName(ColName) values(@paraFirst)";
SqlCommand icomm = new SqlCommand(sql, conn);//conn是连接对象,我就懒得写怎么实例化它了。
SqlParameter para = new SqlParameter("@paraFirst", SqlDbType.VarChar, 50);//SqlDbType.VarChar, 50根据你数据库里对应列的类型和长度修改。
para.Value = t3 != null ? t3 : null;
icomm.Parameters.Add(para);

大概就是这样了。参考一下,根据实际情况改。

#23


写了两个SQL语句吧?哈哈!

#24


string arg1,arg2;
/*对arg1,arg2的赋值代码*/
//....
//....
//....
/*****生成一个插入SQL语句(注意:此处column1,column2的类型是字符,其他类型自已转换吧)****/
string commStr="insert tablename1 (column1,column2) values (";
commStr+=((arg1==null || arg1.Trim().Length<=0)?null:("'"+arg1.replace("'","''")+"'"))+",";
//    如果arg1没有被赋值或有效长度为0则插入空值(即null)    
commStr+=((arg2==null || arg2.Trim().Length<=0)?null:("'"+arg2.replace("'","''")+"'"))+")";

#25


insert into tablea(columnA) values(decode(@value,null,null,@value);
这是Oracle的,不过一般都不这么写,呵呵. 

#26


9楼,你那种永远都取不到NULL。
动态拼SQL语句可以解决,也可以在DAL层加入判断传过来的参数是不是为空再选择如何搞

#27


引用 23 楼 clxcxx 的回复:
写了两个SQL语句吧?哈哈!


希望你别这样。两列写两个,十列写十个,百列了?人别写了。

#1


如果是插入的话,数据库里面没有设置默认值

在插入语句里面不写那列就可以了,自动就是空值

如果是更新,可以用update table set columna=null

#2


insert into TableName(ColumnName) values(NULL);

#3


引用 2 楼 zxkid 的回复:
SQL codeinsertintoTableName(ColumnName)values(NULL);

#4


但是这列也有可能是有值的。就是说如果有值就要插入该值,没有的话就插入null。并不是就只插入null

#5


可以用parameter, 为空时设置为DBNull.Value

#6


你就让列默认为空不就行了

#7


update yourtable 
set columna = null
where columna is not null

#8


如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")"

#9


用变量的方式啊!

insert into tablename values "'+textbox.text.trim()+'" where 条件


textbox为空时,数据库表列中也为空,textbox不为空时,数据库表列中就是textbox的值!

#10


更新上面语句:
insert into tablename values '"+textbox.text.trim()+"' where 条件

#11


程序里边改怎么写就怎么写,数据库里设置默认值不就可以了

#12


我想问一下,你们都自己试过吗?

#13


很多人都没理解我的意思。我再说的清楚点。
假如说数据库中有两列 column1,column2 都是可空的。
现在我在程序里面定义了两个参数,string arg1,arg2。我现在就是想把arg1,arg2的值分别插入到column1,column2中。
也就是用insert tablename1 (column1,column2) values (arg1,arg2)   但是arg1,arg2如果没有值,那就是null,就把null插入到数据库的column1,column2中。

#14


引用 8 楼 GhostAdai 的回复:
如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")"


弄完好象整个语句都变成null了

#15


数据库中字段可为空的话,不用管它就是了。
如果是必填字段,又不保存值,可以用类型的MinValue字段,如DateTime.MinValue。

#16


引用 15 楼 smntbk 的回复:
数据库中字段可为空的话,不用管它就是了。 
如果是必填字段,又不保存值,可以用类型的MinValue字段,如DateTime.MinValue。

不是必填字段,但是该列可能是有值的。如果在程序里面赋值,而不去管他,那不就相当于值没插进,那就是错误了。

#17


引用 14 楼 xingqi_2002 的回复:
引用 8 楼 GhostAdai 的回复:
如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")" 
 

弄完好象整个语句都变成null了


怎么会呢?如果value不是null就返回value本身的值插入,如果是null就返回null值。为什么整个语句都变成null呢?不解。

#18


引用 17 楼 GhostAdai 的回复:
引用 14 楼 xingqi_2002 的回复:
引用 8 楼 GhostAdai 的回复: 
如果是传参的话就这样:假设传的参数是value,"insert into TableName(ColumnName) values(" + value!=null?value:null + ")" 


弄完好象整个语句都变成null了 
 

怎么会呢?如果value不是null就返回value本身的值插入,如果是null就返回null值。为什么整个语句都变成null呢?不解。


string t1 = null;
string t3 = "bbbb";
string cmd = @"Insert into t_table_dictionary_test (f_table_engname,f_table_chnname,f_validSign,f_table_Type,f_compareDb2,f_remark) values ('555','555','Y','555'," + t1 != null ? t1 : null + "," + t3 != null ? t3 : null + ")";

看看是这样吗?

#19


晕,我举的是个例子,最好使用参数形式,可以不用考虑不同类型的参数是否要用''、[]、##等等符号引起来的问题。比如像你这个句子里f_compareDb2如果是数字类型还没问题,如果是字符型就会出问题,因为t1 != null ? t1 : null两头没用''引起来,程序执行就会报格式不匹配的异常。

#20


好了。换了种方式。

#21


不过就是列数多的时候用起来不怎么方便。

#22


可能说得不是很清楚,给你举个例子。

string sql = "insert into TableName(ColName) values(@paraFirst)";
SqlCommand icomm = new SqlCommand(sql, conn);//conn是连接对象,我就懒得写怎么实例化它了。
SqlParameter para = new SqlParameter("@paraFirst", SqlDbType.VarChar, 50);//SqlDbType.VarChar, 50根据你数据库里对应列的类型和长度修改。
para.Value = t3 != null ? t3 : null;
icomm.Parameters.Add(para);

大概就是这样了。参考一下,根据实际情况改。

#23


写了两个SQL语句吧?哈哈!

#24


string arg1,arg2;
/*对arg1,arg2的赋值代码*/
//....
//....
//....
/*****生成一个插入SQL语句(注意:此处column1,column2的类型是字符,其他类型自已转换吧)****/
string commStr="insert tablename1 (column1,column2) values (";
commStr+=((arg1==null || arg1.Trim().Length<=0)?null:("'"+arg1.replace("'","''")+"'"))+",";
//    如果arg1没有被赋值或有效长度为0则插入空值(即null)    
commStr+=((arg2==null || arg2.Trim().Length<=0)?null:("'"+arg2.replace("'","''")+"'"))+")";

#25


insert into tablea(columnA) values(decode(@value,null,null,@value);
这是Oracle的,不过一般都不这么写,呵呵. 

#26


9楼,你那种永远都取不到NULL。
动态拼SQL语句可以解决,也可以在DAL层加入判断传过来的参数是不是为空再选择如何搞

#27


引用 23 楼 clxcxx 的回复:
写了两个SQL语句吧?哈哈!


希望你别这样。两列写两个,十列写十个,百列了?人别写了。