CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

并不傻的问题:空值与0的问题

楼主ddangerous169(零点烛光)2006-03-03 11:30:49 在 .NET技术 / ASP.NET 提问

如题.  
  在做项目过程中,有一部分数据类型的字段.  
  用户要求,不输入情况下为null,并不是0  
  我该如何处理?  
  项目中多处用到,有没有简单的方法,可以搞定.否则需要修改整个工程. 问题点数:200、回复次数:30Top

1 楼happycoolsky(学习专用帐号)回复于 2006-03-03 11:33:37 得分 5

if   TextBox1.text   =   ""  
  {  
        数据字段   =   null;  
  }  
  else  
  {  
         
        数据字段   =   TextBox1.text;    
  }Top

2 楼happyfamily(FreeHorse)回复于 2006-03-03 11:34:53 得分 10

保存的时候做一个判断,如果为空就给一个DBNull.ValueTop

3 楼coldpanth(^War3^)回复于 2006-03-03 11:35:45 得分 10

将数据库中的字段改为允许空   ,默认值为空  
   
  把所有有默认值的方法中的Parameter.Add中的值0改为System.DBNull.Value  
   
  Top

4 楼net_lover(【孟子E章】)回复于 2006-03-03 11:36:05 得分 20

项目中多处用到?  
  你原来怎么写的啊,有没有通用的函数?Top

5 楼mobydick(敌伯威|我排著队拿著爱的号码牌)回复于 2006-03-03 11:36:05 得分 15

输入的时候肯定是字符串啊  
  不输入,字符串就是""也就是String.Empty;  
   
  比如,数量这个字段,从界面读入的时候,如果什么都没有输入,就是  
  string   strCount   =   "";  
  在填充你的数据库适配器的时候把""转化为null就行了。Top

6 楼yanfan_ever()回复于 2006-03-03 11:36:35 得分 1

在定义的地方,初始化时全都赋为空,然后再转化为数据类型Top

7 楼daishengs(横舟摆渡)回复于 2006-03-03 11:37:15 得分 1

呵呵,我以前的一个项目在接近尾声时,客户也有这样的要求,可我不想大改程序了,我就在前台显示的程序里处理了一下,如果输出为'0'、'XXX.00'的数据就显示为''、'XXX'。Top

8 楼zhongkeruanjian(编程亮子)回复于 2006-03-03 11:39:04 得分 1

不改代码的话,那就再触发器里做吧。Top

9 楼ddangerous169(零点烛光)回复于 2006-03-03 11:40:03 得分 0

有的可能需要参与运算,参与运算的当0处理,界面上显示当空处理Top

10 楼ddangerous169(零点烛光)回复于 2006-03-03 11:43:49 得分 0

有一个类,我用的是clsa架构.Top

11 楼ddangerous169(零点烛光)回复于 2006-03-03 11:45:40 得分 0

Imports   System.Data  
   
  Namespace   Data  
   
      Public   Class   SafeDataReader  
   
          Implements   IDataReader  
   
          Private   mDataReader   As   IDataReader  
   
          Public   Sub   New(ByVal   DataReader   As   IDataReader)  
              mDataReader   =   DataReader  
          End   Sub  
   
          Public   Function   GetString(ByVal   i   As   Integer)   As   String   Implements   IDataReader.GetString  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   ""  
              Else  
                  Return   mDataReader.GetString(i)  
              End   If  
          End   Function  
   
          Public   Function   GetValue(ByVal   i   As   Integer)   As   Object   Implements   IDataReader.GetValue  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   Nothing  
              Else  
                  Return   mDataReader.GetValue(i)  
              End   If  
          End   Function  
   
          Public   Function   GetInt32(ByVal   i   As   Integer)   As   Integer   Implements   IDataReader.GetInt32  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetInt32(i)  
              End   If  
          End   Function  
   
          Public   Function   GetDouble(ByVal   i   As   Integer)   As   Double   Implements   IDataReader.GetDouble  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetDouble(i)  
              End   If  
          End   Function  
   
          Public   Function   GetSmartDate(ByVal   i   As   Integer,   Optional   ByVal   MinIsEmpty   As   Boolean   =   True)   As   SmartDate  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   New   SmartDate(MinIsEmpty)  
   
              Else  
                  Return   New   SmartDate(mDataReader.GetDateTime(i),   MinIsEmpty)  
              End   If  
          End   Function  
   
          Public   Function   GetGuid(ByVal   i   As   Integer)   As   Guid   Implements   IDataReader.GetGuid  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   Guid.Empty  
              Else  
                  Return   mDataReader.GetGuid(i)  
              End   If  
          End   Function  
   
          Public   Function   Read()   As   Boolean   Implements   IDataReader.Read  
              Return   mDataReader.Read  
          End   Function  
   
          Public   Function   NextResult()   As   Boolean   Implements   IDataReader.NextResult  
              Return   mDataReader.NextResult()  
          End   Function  
   
          Public   Sub   Close()   Implements   IDataReader.Close  
              mDataReader.Close()  
          End   Sub  
   
          Public   ReadOnly   Property   Depth()   As   Integer   Implements   System.Data.IDataReader.Depth  
              Get  
                  Return   mDataReader.Depth  
              End   Get  
          End   Property  
   
          Public   Sub   Dispose()   Implements   System.IDisposable.Dispose  
              mDataReader.Dispose()  
          End   Sub  
   
          Public   ReadOnly   Property   FieldCount()   As   Integer   Implements   System.Data.IDataRecord.FieldCount  
              Get  
                  Return   mDataReader.FieldCount  
              End   Get  
          End   Property  
   
          Public   Function   GetBoolean(ByVal   i   As   Integer)   As   Boolean   Implements   System.Data.IDataRecord.GetBoolean  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   False  
              Else  
                  Return   mDataReader.GetBoolean(i)  
              End   If  
          End   Function  
   
          Public   Function   GetByte(ByVal   i   As   Integer)   As   Byte   Implements   System.Data.IDataRecord.GetByte  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetByte(i)  
              End   If  
          End   Function  
   
          Public   Function   GetBytes(ByVal   i   As   Integer,   ByVal   fieldOffset   As   Long,   ByVal   buffer()   As   Byte,   ByVal   bufferoffset   As   Integer,   ByVal   length   As   Integer)   As   Long   Implements   System.Data.IDataRecord.GetBytes  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetBytes(i,   fieldOffset,   buffer,   bufferoffset,   length)  
              End   If  
          End   Function  
   
          Public   Function   GetChar(ByVal   i   As   Integer)   As   Char   Implements   System.Data.IDataRecord.GetChar  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   Char.MinValue  
              Else  
                  Return   mDataReader.GetChar(i)  
              End   If  
          End   Function  
   
          Public   Function   GetChars(ByVal   i   As   Integer,   ByVal   fieldoffset   As   Long,   ByVal   buffer()   As   Char,   ByVal   bufferoffset   As   Integer,   ByVal   length   As   Integer)   As   Long   Implements   System.Data.IDataRecord.GetChars  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetChars(i,   fieldoffset,   buffer,   bufferoffset,   length)  
              End   If  
          End   Function  
   
          Public   Function   GetData(ByVal   i   As   Integer)   As   System.Data.IDataReader   Implements   System.Data.IDataRecord.GetData  
              Return   mDataReader.GetData(i)  
          End   Function  
   
          Public   Function   GetDataTypeName(ByVal   i   As   Integer)   As   String   Implements   System.Data.IDataRecord.GetDataTypeName  
              Return   mDataReader.GetDataTypeName(i)  
          End   Function  
   
          Public   Function   GetDateTime(ByVal   i   As   Integer)   As   Date   Implements   System.Data.IDataRecord.GetDateTime  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   Date.MinValue  
              Else  
                  Return   mDataReader.GetDateTime(i)  
              End   If  
          End   Function  
   
          Public   Function   GetDecimal(ByVal   i   As   Integer)   As   Decimal   Implements   System.Data.IDataRecord.GetDecimal  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetDecimal(i)  
              End   If  
          End   Function  
   
          Public   Function   GetFieldType(ByVal   i   As   Integer)   As   System.Type   Implements   System.Data.IDataRecord.GetFieldType  
              Return   mDataReader.GetFieldType(i)  
          End   Function  
   
          Public   Function   GetFloat(ByVal   i   As   Integer)   As   Single   Implements   System.Data.IDataRecord.GetFloat  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetFloat(i)  
              End   If  
          End   Function  
   
          Public   Function   GetInt16(ByVal   i   As   Integer)   As   Short   Implements   System.Data.IDataRecord.GetInt16  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetInt16(i)  
              End   If  
          End   Function  
   
          Public   Function   GetInt64(ByVal   i   As   Integer)   As   Long   Implements   System.Data.IDataRecord.GetInt64  
              If   mDataReader.IsDBNull(i)   Then  
                  Return   0  
              Else  
                  Return   mDataReader.GetInt64(i)  
              End   If  
          End   Function  
   
          Public   Function   GetName(ByVal   i   As   Integer)   As   String   Implements   System.Data.IDataRecord.GetName  
              Return   mDataReader.GetName(i)  
          End   Function  
   
          Public   Function   GetOrdinal(ByVal   name   As   String)   As   Integer   Implements   System.Data.IDataRecord.GetOrdinal  
              Return   mDataReader.GetOrdinal(name)  
          End   Function  
   
          Public   Function   GetSchemaTable()   As   System.Data.DataTable   Implements   System.Data.IDataReader.GetSchemaTable  
              Return   mDataReader.GetSchemaTable  
          End   Function  
   
          Public   Function   GetValues(ByVal   values()   As   Object)   As   Integer   Implements   System.Data.IDataRecord.GetValues  
              Return   mDataReader.GetValues(values)  
          End   Function  
   
          Public   ReadOnly   Property   IsClosed()   As   Boolean   Implements   System.Data.IDataReader.IsClosed  
              Get  
                  Return   mDataReader.IsClosed  
              End   Get  
          End   Property  
   
          Public   Function   IsDBNull(ByVal   i   As   Integer)   As   Boolean   Implements   System.Data.IDataRecord.IsDBNull  
              Return   mDataReader.IsDBNull(i)  
          End   Function  
   
          Default   Public   Overloads   ReadOnly   Property   Item(ByVal   i   As   Integer)   As   Object   Implements   System.Data.IDataRecord.Item  
              Get  
                  If   mDataReader.IsDBNull(i)   Then  
                      Return   Nothing  
                  Else  
                      Return   mDataReader.Item(i)  
                  End   If  
              End   Get  
          End   Property  
   
          Default   Public   Overloads   ReadOnly   Property   Item(ByVal   name   As   String)   As   Object   Implements   System.Data.IDataRecord.Item  
              Get  
                  Dim   value   As   Object   =   mDataReader.Item(name)  
                  If   DBNull.Value.Equals(value)   Then  
                      Return   Nothing  
                  Else  
                      Return   value  
                  End   If  
              End   Get  
          End   Property  
   
          Public   ReadOnly   Property   RecordsAffected()   As   Integer   Implements   System.Data.IDataReader.RecordsAffected  
              Get  
                  Return   mDataReader.RecordsAffected  
              End   Get  
          End   Property  
      End   Class  
   
  End   Namespace  
  Top

12 楼triffang(冲凉不除3)回复于 2006-03-03 13:03:58 得分 10

随便也提个问题:如果是数字型呢,空的话怎么办?Top

13 楼ddangerous169(零点烛光)回复于 2006-03-03 13:10:18 得分 0

现在出现的问题就是数字类型的字段如何处理.  
   
  比如,在输入的情况下,value=iif(txtv.text="",nothing,csng(txtv.text=""))Top

14 楼ddangerous169(零点烛光)回复于 2006-03-03 13:12:42 得分 0

Public   Property   MaxXiaXingDianLiu()   As   Single  
                          Get  
                                  Return   mMaxXiaXingDianLiu  
                          End   Get  
                          Set(ByVal   Value   As   Single)  
                                  mMaxXiaXingDianLiu   =   Value  
                                  markdirty()  
                          End   Set  
                  End   Property  
  在调试的过程中,发现,中果赋空值,进入set后,仍为0.0,已自动转换.  
  如不使用属性,       mMaxXiaXingDianLiu   =nothing.再输出其值,仍为0.0并不是nothing.  
  这个该如何解释Top

15 楼lidong6(立冬)回复于 2006-03-03 13:21:09 得分 15

Public   Property   MaxXiaXingDianLiu()   As   Single  
  改为  
  Public   Property   MaxXiaXingDianLiu()   As   ObjectTop

16 楼boy_north(北方的豹子)回复于 2006-03-03 13:30:10 得分 5

判断为空就插入空值呀Top

17 楼ddangerous169(零点烛光)回复于 2006-03-03 13:35:25 得分 0

那我在界面上赋值时也要赋判断么?  
  if   MaxXiaXingDianLiu=nothing   then   txtv.text="'Top

18 楼goody9807(http://goody9807.cnblogs.com)回复于 2006-03-03 13:42:13 得分 1

用反射遍历   Form     中的所有ControlsTop

19 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-03-03 13:42:32 得分 15

关键是怎么把空值保存在整型字段里。  
   
  如果是.NET   Framework   1.x这样做:  
   
  1、用SqlInt32保存,空值是SqlInt32.Null。  
  SqlInt32   amount   =   Amount.Text==""?SqlInt32.Null:int.Parse(   Amount.Text   );  
  SqlInt32直接是数据库类型,他与int之间有隐式类型转换。  
   
  2、用object保存。  
  object   amount   =   Amount.Text==""?null:int.Parse(   Amount.Text   );  
   
   
  如果是.NET   Framework   2.0这样做:  
   
  用int?保存。  
   
   
  上面所说的所有方法在创建SqlParameter的时候,都能够自动识别类型……Top

20 楼ddangerous169(零点烛光)回复于 2006-03-03 15:10:58 得分 0

这上语句,和vb的iif应该很相似吧.  
  Amount为object类型  
  return   iif(Amount="",dbnull.value,csng(Amount))  
  当Amount=""时,csng(Amount))提示错误"串到..的转换"  
  如果我不进行转换将不能运算Top

21 楼blackmailer()回复于 2006-03-03 19:53:33 得分 1

学习,帮你顶一下!Top

22 楼remymartin(杯中明月)回复于 2006-03-03 22:37:41 得分 5

public   object   checkNull(object   obj)  
  {  
          if(obj==null||(string)obj=="")  
                    return   DBNull.Value;  
          else  
                    return   obj;  
  }Top

23 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-03-03 22:55:17 得分 23

用户要求,不输入情况下为null,并不是0  
  ——————————————————————————————————————  
  仅仅是显示吗?如果仅仅是显示问题,那么这样的程序其实没有什么价值,让用户“忍忍”也就算了。  
   
  如果是业务处理软件,null值与0值得差别影响到一整套业务流程的处理。提出这个问题,一定意味着需求分析“失败”,需要重新分析。Top

24 楼tengfeng8888()回复于 2006-03-03 23:41:42 得分 10

一个比较简单的方法就是,数据库不用该,遍历显示表每个Item,如果为0,就把当前值赋为空(""),打印的时候就直接导出当前表,不会有0Top

25 楼ddangerous169(零点烛光)回复于 2006-03-06 09:13:29 得分 0

1,to   sp1234(隔离出循环和分支=程序简洁明了+很少歧义+智能),这个是用户无法忍受的。是石油的项目,日产油为0代表没有产油,没有填代表不定数呀。差不多也是显示的问题吧。  
  2,to   tengfeng8888()   0和空的概念,0就是0,如果是0的也被当空处理也是不对的。  
  3,to   remymartin(杯中明月),您写的这是什么?应该在那里应用。Top

26 楼luckyprg(lucky)回复于 2006-03-06 09:51:09 得分 25

1,to   sp1234(隔离出循环和分支=程序简洁明了+很少歧义+智能),这个是用户无法忍受的。是石油的项目,日产油为0代表没有产油,没有填代表不定数呀。差不多也是显示的问题吧。  
  -------------------------------------------------------------------------------------  
  这种情况只能去改赋值的地方了,如果全部是用的公用函数还好点,不然要改的地方就多了。Top

27 楼cow8063(天涯远不远?不远!人在天涯,天涯怎会远)回复于 2006-03-06 10:09:21 得分 1

将数据库中的字段改为允许空   ,默认值为空  
   
  其它的不用做Top

28 楼nameone(过客)回复于 2006-03-06 10:09:54 得分 1

UPTop

29 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2006-03-06 11:20:31 得分 25

如果你的业务逻辑都封装到类了,不如就继承原来的类然后重写必要的方法把相关属性改为自动转换为Null。Top

30 楼ddangerous169(零点烛光)回复于 2006-03-06 15:32:45 得分 0

现在只有一种办法.  
  分三步走  
  1,属性定义,定义成object类型或是可以赋空值的类型)  
  2,赋值时,赋空  
  3,保存根据属性的定义,把空值Parameter.Add中的值改为System.DBNull.Value  
   
  try   it   as   quickly   as   possible  
  if   that's   ok,will   be   over   this   discussion.  
   
  thanks  
   
  Top

相关问题

  • 黑木黑木,我也给大家看看吧,不傻不要钱~~~(附照片)
  • 程序员都不傻,而且都很英俊,为什么老是失恋??
  • 空值问题?
  • 空值问题
  • 空值问题!
  • 怎么将空值转换为空格?
  • 如何创建一个空的DateTime型数据,并把这个空值写到数据库中?
  • Oracle中的空值问题
  • 如何判断空值?
  • 清空表单的值!

关键词

  • .net framework
  • sp1
  • 字段
  • 项目
  • 数据
  • null
  • mdatareader
  • isdbnull
  • getint32
  • implements idatareader

得分解答快速导航

  • 帖主:ddangerous169
  • happycoolsky
  • happyfamily
  • coldpanth
  • net_lover
  • mobydick
  • yanfan_ever
  • daishengs
  • zhongkeruanjian
  • triffang
  • lidong6
  • boy_north
  • goody9807
  • Ivony
  • blackmailer
  • remymartin
  • sp1234
  • tengfeng8888
  • luckyprg
  • cow8063
  • nameone
  • cat_hsfz

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo