查询数据库,处理NULL值问题

来源:互联网 发布:名片设计软件手机版 编辑:程序博客网 时间:2024/06/05 12:43

在做机房收费系统时,每当从数据库中查找数据并显示到窗体界面时,如果查询的记录中有字段值为NULL时,就会报错:

 

比如:(例子可能不恰当,因为注册时不允许不输入学生姓名。但是就是那个意思)卡号1(学号为1)上机时,在上机界面要显示上机信息:学号、姓名、性别、系别….. 。(上机时要联结三个表:CardInfo、StudentInfo、OnOffLine。这里就不细说了)但是,在从StudentInfo表中查询信息时,“学号”字段为NULL,此时就会发生以上错误。

 

以下是我的StudentInfo表:

 

 

如何解决??

首先,我们知道要想把表中的数据显示到界面,就需要定义的函数返回一个实体或一个数据表或一个数据集。由于显示上机涉及到不止一个表,所以我的是返回数据集ds。

 

每当查询表,将查询信息返回到数据集中,都要用到SqlHelper中的一个方法:ExecuteDataSet(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal parameter As SqlParameter()) As DataSet或重载方法 ExeCuteDataSet(ByVal cmdText As String, ByVal cmdType As CommandType)

 

在问题没有解决之前我的ExecuteDataSet()方法是这样写的(以第一个重载方法为例):

   

[vb] view plaincopy
  1. Public Function ExecuteDataSet(ByVal cmdText As StringByVal cmdType As CommandType, ByVal parameter As SqlParameter()) As DataSet  
  2.        Dim sqlAdapter As SqlDataAdapter  
  3.        Dim ds As DataSet = New DataSet()  
  4.   
  5.   
  6.        cmd.Connection = conn  
  7.        cmd.CommandText = cmdText         '设定执行的sql语句  
  8.        cmd.CommandType = cmdType          '执行语句的类型  
  9.        cmd.Parameters.AddRange(parameter)    '添加参数  
  10.   
  11.        sqlAdapter = New SqlDataAdapter(cmd)  
  12.   
  13.        Try  
  14.            conn.Open()  
  15.            sqlAdapter.Fill(ds, "NewTable")      '把从数据源中选取的行添加到数据集中            
  16.            Return ds                 '返回数据集ds  
  17.   
  18.        Catch ex As Exception  
  19.            Return Nothing  
  20.   
  21.        Finally  
  22.            Call CloseCmd(cmd)  
  23.        End Try  
  24.   
  25.    End Function  


要解决以上NULL值问题,ExecuteDataSet()方法是这样写的:

注意与修改前代码的区别:主要是加了一个For循环,来判断返回的数据集的表中的每一行的每个字段是否有NULL值,如果有,则把该字段值改为空值" ")

 

[vb] view plaincopy
  1. Public Function ExecuteDataSet(ByVal cmdText As StringByVal cmdType As CommandType, ByVal parameter As SqlParameter()) As DataSet  
  2.   
  3.         Dim sqlAdapter As SqlDataAdapter  
  4.   
  5.         Dim ds As DataSet = New DataSet()  
  6.   
  7.         cmd.Connection = conn  
  8.   
  9.         cmd.CommandText = cmdText         '设定执行的sql语句  
  10.   
  11.         cmd.CommandType = cmdType          '执行语句的类型  
  12.   
  13.         cmd.Parameters.AddRange(parameter)    '添加参数  
  14.   
  15.    
  16.   
  17.         sqlAdapter = New SqlDataAdapter(cmd)  
  18.   
  19.    
  20.         Try  
  21.   
  22.             conn.Open()  
  23.             sqlAdapter.Fill(ds, "NewTable")      '把从数据源中选取的行添加到数据集中  
  24.   
  25.    
  26.   
  27.            <span style="BACKGROUND-COLOR: #ff0000"'将数据集中为NULL值的字段值转换为空值  
  28.   
  29.             For i = 0 To ds.Tables("NewTable").Rows.Count - 1  
  30.   
  31.                 For j = 0 To ds.Tables("NewTable").Columns.Count - 1  
  32.   
  33.                     If IsDBNull(ds.Tables("NewTable").Rows(i)(j)) Then   '判断数据集中的每条记录的每个字段是否为NULL,如果为NULL则,设置字段值为空值" "  
  34.   
  35.                          ds.Tables("NewTable").Rows(i)(j) = " "      '将字段为NULL的值设置为空值" "  
  36.   
  37.    
  38.                     End If  
  39.   
  40.                 Next  
  41.   
  42.             Next  
  43. </span>  
  44.    
  45.            Return ds                 '返回没有NULL值的数据集ds  
  46.   
  47.          Catch ex As Exception  
  48.   
  49.             Return Nothing  
  50.   
  51.    
  52.   
  53.         Finally  
  54.   
  55.             Call CloseCmd(cmd)  
  56.   
  57.         End Try  
  58.   
  59.    
  60.   
  61.     End Function  
  62.   
  63.    


 

当然,解决NULL值问题的方法还有很多,比如可以在设计数据库表时,规定每个字段值不许为空:

 

还可以用IsDBNull来判断,等等。

0 0