生活随笔
收集整理的這篇文章主要介紹了
查询数据库,处理NULL值问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在做機房收費系統時,每當從數據庫中查找數據并顯示到窗體界面時,如果查詢的記錄中有字段值為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
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??????????? ???????cmd.CommandType?=?cmdType???????????? ???????cmd.Parameters.AddRange(parameter)?????? ?? ???????sqlAdapter?=?New ?SqlDataAdapter(cmd)?? ?? ???????Try ?? ???????????conn.Open()?? ???????????sqlAdapter.Fill(ds,?"NewTable" )?????? ?? ???????????Return ?ds????????????????? ?? ?? ???????Catch ?ex? As ?Exception?? ???????????Return ? Nothing ?? ?? ???????Finally ?? ???????????Call ?CloseCmd(cmd)?? ???????End ? Try ?? ?? ???End ? Function ??
要解決以上NULL值問題,ExecuteDataSet()方法是這樣寫的:
(注意 與修改前代碼的區別:主要是加了一個For循環,來判斷返回的數據集的表中的每一行的每個字段是否有NULL值,如果有,則把該字段值改為空值" ")
?
[vb] ?view plaincopy
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??????????? ?? ????????cmd.CommandType?=?cmdType???????????? ?? ????????cmd.Parameters.AddRange(parameter)?????? ?? ??? ?? ????????sqlAdapter?=?New ?SqlDataAdapter(cmd)?? ?? ??? ????????Try ?? ?? ????????????conn.Open()?? ????????????sqlAdapter.Fill(ds,?"NewTable" )?????? ?? ?? ??? ?? ???????????<span?style="BACKGROUND-COLOR:?#ff0000" >? ?? ?? ????????????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 ??? ?? ?? ?????????????????????????ds.Tables("NewTable" ).Rows(i)(j)?=? "?" ?????? ?? ?? ??? ????????????????????End ? If ?? ?? ????????????????Next ?? ?? ????????????Next ?? </span>?? ??? ???????????Return ?ds????????????????? ?? ?? ?????????Catch ?ex? As ?Exception?? ?? ????????????Return ? Nothing ?? ?? ??? ?? ????????Finally ?? ?? ????????????Call ?CloseCmd(cmd)?? ?? ????????End ? Try ?? ?? ??? ?? ????End ? Function ?? ?? ???
?
當然,解決NULL值問題的方法還有很多,比如可以在設計數據庫表時,規定每個字段值不許為空:
?
還可以用IsDBNull來判斷,等等。
總結
以上是生活随笔 為你收集整理的查询数据库,处理NULL值问题 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。