数据库“空”值的问题
我编写ASP.NET程序的时候遇到一些问题,请教高手:
当数据库一个表有多个字段,每个字段都允许为“空”时,用SQL查询返回的某一个“空”字段的值是
SYSTEM.DBNULL.VALUE 而不是我们通常在ADO其他版本中的“”,(文本字段的空值),这就使得我某些特殊的情况下,要对字段的空值判定的时候出错。
请教高手,数据表的字段判空,你们有好的方法吗?
问题点数:20、回复次数:20Top
1 楼aspdotnet2005(天中之子、为中原喝采![我想找兼职MSN:Red-Maple@hotmail.com])回复于 2006-05-01 01:14:38 得分 5
设有一字段为aaa
SELECT CASE WHEN aaa IS NULL THEN '' ELSE aaa END AS aaa FROM tableNameTop
2 楼levin9(生活就是強姦,習慣啦就是享受)回复于 2006-05-01 01:18:27 得分 0
SELECT CASE WHEN aaa IS NULL THEN '' ELSE aaa END AS aaa FROM tableName
或者写个api函数,默认给个“”给他Top
3 楼aspdotnet2005(天中之子、为中原喝采![我想找兼职MSN:Red-Maple@hotmail.com])回复于 2006-05-01 01:21:57 得分 0
不用写什么函数,想简单直接将该字段设为默认值Top
4 楼Lcindep110(Descovering YourSelf)回复于 2006-05-01 01:28:15 得分 5
SELECT ISNULL(field,'isnull') FROM TBNAMETop
5 楼newline2000(修改你在CSDN社区的信息)回复于 2006-05-01 02:27:13 得分 0
感谢你们的回复,谢谢
在SQL里面的问题解决了但是在.NET的问题仍然存在,设5X5的表(特殊要求一开始就控制了其列和行的长度),为了控制他有5行,INSTER 5 个ID值(1-5),那么剩下的4个字段就为空了,但是这4个字段的值就是SYSTEM.DBNULL.VALUE了,如果我 SELECT * FROM 这个表,然后read = SQLcmd.ExecuteReader ,用READ.GETVALUE(5)得到的就是SYSTEM.DBNULL.VALUE,而且你用
if (read.getvalue(5) is system.dbnull.value) or (read.getvalue(5).tostring="") then
来判断系统提示整个if语句都是错误的。Top
6 楼xxuu503(中国没有prison break只是因为the company不让拍)回复于 2006-05-01 05:59:47 得分 5
Lcindep110(Going Home) ( ) 信誉:100 2006-05-01 01:28:00 得分: 0
说的对
SELECT ISNULL(field1,''),ISNULL(field2,0) FROM TBNAME
如果字符型的可以替换为空
数字型的替换为0
这样.net里处理的时候,就没有空值了
Top
7 楼cansum396(漆黑的夜)回复于 2006-05-01 07:17:01 得分 0
if(h_dt.Rows[0]["IS_APPCUSTOMER"]==DBNull.Value )
{
t_Po.IS_APPCUSTOMER=0;
}
else
{
t_Po.IS_APPCUSTOMER=(int) h_dt.Rows[0]["IS_APPCUSTOMER"];
}Top
8 楼xiahouwen(武眉博<活靶子.NET>)回复于 2006-05-01 09:05:14 得分 0
这就使得我某些特殊的情况下,要对字段的空值判定的时候出错。
什么情况????????Top
9 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-05-03 01:38:24 得分 0
说实话,如果你的空值并不代表什么特别的意义,就是作为空字符串处理的话,我真不知道你要在数据库里面允许空干嘛……Top
10 楼jeremychen001181(Τιτάνες)回复于 2006-05-03 01:50:18 得分 0
在。NET中用sqlreader控件读取数据,并进行NULL值判断,并没有接触过, 但是LZ若用DATASET控件来获取数据是可以在程序中进行判断NULL值得, 具体操作如 : cansum396(沉觉不醒)Top
11 楼ericfine(埃里克)回复于 2006-05-03 01:56:20 得分 0
数据表设计不推荐使用可为空的列, 用默认值吧Top
12 楼jeremychen001181(Τιτάνες)回复于 2006-05-03 04:33:38 得分 0
代码已测试通过:
string CONN_STRING = @"server=bluebamboo;database=pumpkinwebengine;user id=Customer";
string strQuery = @"select * from Advertisement";
SqlConnection conn = new SqlConnection(CONN_STRING);
try
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = strQuery;
cmd.CommandType = CommandType.Text;
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(rdr.Read())
{
for(int i = 0; i < rdr.FieldCount; i++)
{
if (rdr.IsDBNull(i))
{
/*为值空时*/
}
else
{
/*值不为空时*/
}
}
}
}
catch{throw;} Top
13 楼newline2000(修改你在CSDN社区的信息)回复于 2006-05-05 03:41:29 得分 0
感谢 jeremychen001181(青竹竿) ( ) 信誉:100
Top
14 楼newline2000(修改你在CSDN社区的信息)回复于 2006-05-05 03:53:15 得分 0
再请教: jeremychen001181(青竹竿) ( ) 信誉:100
当“”文本空,与SYSTEM.DBNULL 空,同时存在的时候怎么办?如何判断?写到这我的灵感来了。。。
if (rdr.IsDBNull(i))
{
/*为值空时*/
}
else
{
/*值不为空时*/
if (rdr(i).tostring!="")
{/*值不为文本空时*/}
else
{}
}
也不知道对不对,西西....Top
15 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-05 04:10:26 得分 0
结论:数据库设计的差,害死程序员Top
16 楼jiajiaxiaxia(轻烟)回复于 2006-05-05 06:56:43 得分 0
路过,有意思Top
17 楼jeremychen001181(Τιτάνες)回复于 2006-05-06 01:33:53 得分 0
if (rdr(i).tostring!="")
//-----------------------------------
if (rdr(i).tostring().trim()!="")Top
18 楼forkzeng(小光)回复于 2006-05-06 01:39:41 得分 0
我编写ASP.NET程序的时候遇到一些问题,请教高手:
当数据库一个表有多个字段,每个字段都允许为“空”时,用SQL查询返回的某一个“空”字段的值是
SYSTEM.DBNULL.VALUE 而不是我们通常在ADO其他版本中的“”,(文本字段的空值),这就使得我某些特殊的情况下,要对字段的空值判定的时候出错。
请教高手,数据表的字段判空,你们有好的方法吗?
==========
这个不可能吧,你从数据库取出来,不是在ADO了吧?
Top
19 楼ericfine(埃里克)回复于 2006-05-11 17:41:12 得分 0
JavaDianNet(研究petshop3.0...http://blog.csdn.net/JavaDianNet) ( ) 信誉:100 2006-5-5 4:10:26 得分: 0
结论:数据库设计的差,害死程序员
数据库不照样还是程序员设计嘛
Top
20 楼cansum396(漆黑的夜)回复于 2006-05-11 17:43:31 得分 5
SELECT ISNULL(FIELDNAME,'') FROM TABLETop




