查询数据库,处理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()方法是这样写的(以第一个重载方法为例):
- Public Function ExecuteDataSet(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal parameter As SqlParameter()) As DataSet
- Dim sqlAdapter As SqlDataAdapter
- Dim ds As DataSet = New DataSet()
- cmd.Connection = conn
- cmd.CommandText = cmdText '设定执行的sql语句
- cmd.CommandType = cmdType '执行语句的类型
- cmd.Parameters.AddRange(parameter) '添加参数
- sqlAdapter = New SqlDataAdapter(cmd)
- Try
- conn.Open()
- sqlAdapter.Fill(ds, "NewTable") '把从数据源中选取的行添加到数据集中
- Return ds '返回数据集ds
- Catch ex As Exception
- Return Nothing
- Finally
- Call CloseCmd(cmd)
- End Try
- End Function
要解决以上NULL值问题,ExecuteDataSet()方法是这样写的:
(注意与修改前代码的区别:主要是加了一个For循环,来判断返回的数据集的表中的每一行的每个字段是否有NULL值,如果有,则把该字段值改为空值" ")
- Public Function ExecuteDataSet(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal parameter As SqlParameter()) As DataSet
- Dim sqlAdapter As SqlDataAdapter
- Dim ds As DataSet = New DataSet()
- cmd.Connection = conn
- cmd.CommandText = cmdText '设定执行的sql语句
- cmd.CommandType = cmdType '执行语句的类型
- cmd.Parameters.AddRange(parameter) '添加参数
- sqlAdapter = New SqlDataAdapter(cmd)
- Try
- conn.Open()
- sqlAdapter.Fill(ds, "NewTable") '把从数据源中选取的行添加到数据集中
- <span style="BACKGROUND-COLOR: #ff0000"> '将数据集中为NULL值的字段值转换为空值
- For i = 0 To ds.Tables("NewTable").Rows.Count - 1
- For j = 0 To ds.Tables("NewTable").Columns.Count - 1
- If IsDBNull(ds.Tables("NewTable").Rows(i)(j)) Then '判断数据集中的每条记录的每个字段是否为NULL,如果为NULL则,设置字段值为空值" "
- ds.Tables("NewTable").Rows(i)(j) = " " '将字段为NULL的值设置为空值" "
- End If
- Next
- Next
- </span>
- Return ds '返回没有NULL值的数据集ds
- Catch ex As Exception
- Return Nothing
- Finally
- Call CloseCmd(cmd)
- End Try
- End Function
当然,解决NULL值问题的方法还有很多,比如可以在设计数据库表时,规定每个字段值不许为空:
还可以用IsDBNull来判断,等等。
- 查询数据库,处理NULL值问题
- 查询数据库,处理NULL值问题
- 数据库查询null值时的SQL处理
- 处理数据库Null值
- c#中处理数据库中字段值的Null问题
- SQL SERVER数据库查询NULL的问题
- 数据库如何处理null 值
- 处理TADOQuery查询返回的Null值
- 解决数据库查询时Null的问题(如SUM函数)
- 不同数据库对null值的处理
- Sqoop导入hive数据库NULL值处理
- mysql null 值查询问题 (转)
- SQL Server 查询时NULL值问题
- NULL 值处理遇到的错误问题.
- XGBoost处理缺失值(Null)问题
- 常见数据库中null值替换问题
- oracle数据库解决查询值为null的情况
- 怎样处理数据库中的NULL
- UITextField
- C# ADO - timeout 引出的探讨
- 8086汇编初学者问题FAQ
- Android Context 上下文 你必须知道的一切
- UIControl
- 查询数据库,处理NULL值问题
- [leetcode 270] Closest Binary Search Tree Value
- UIGestureRecognizer
- linux权限浅析
- 声明与变量
- 执行多条SQL语句,执行数据库事务(可传入Sql参数)
- 线性判别分析(LDA), 主成分分析(PCA)
- 常量与字段(contant and field)
- 《leetCode》:Merge Two Sorted Lists