查詢資料庫,處理NULL值問題

2021-07-06 09:08:04 字數 3596 閱讀 5076

在做機房收費系統時,每當從資料庫中查詢資料並顯示到窗體介面時,如果查詢的記錄中有字段值為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 plain

copy

public

function

executedataset(

byval

cmdtext 

asstring

, byval

cmdtype 

ascommandtype, 

byval

parameter 

assqlparameter()) 

asdataset  

dimsqladapter 

assqldataadapter  

dimds 

asdataset = 

newdataset()  

cmd.connection = conn  

cmd.commandtext = cmdtext         '設定執行的sql語句

cmd.commandtype = cmdtype          '執行語句的型別

cmd.parameters.addrange(parameter)    '新增引數

sqladapter = new

sqldataadapter(cmd)  

tryconn.open()  

sqladapter.fill(ds, "newtable"

)      

'把從資料來源中選取的行新增到資料集中          

return

ds                 

'返回資料集ds

catch

ex as

exception  

return

nothing

finally

call

closecmd(cmd)  

endtry

endfunction

要解決以上null值問題,executedataset()方法是這樣寫的:

注意與修改前**的區別:主要是加了乙個for迴圈,來判斷返回的資料集的表中的每一行的每個字段是否有null值,如果有,則把該字段值改為空值" ")

[vb]view plain

copy

public

function

executedataset(

byval

cmdtext 

asstring

, byval

cmdtype 

ascommandtype, 

byval

parameter 

assqlparameter()) 

asdataset  

dimsqladapter 

assqldataadapter  

dimds 

asdataset = 

newdataset()  

cmd.connection = conn  

cmd.commandtext = cmdtext         '設定執行的sql語句

cmd.commandtype = cmdtype          '執行語句的型別

cmd.parameters.addrange(parameter)    '新增引數

sqladapter = new

sqldataadapter(cmd)  

tryconn.open()  

sqladapter.fill(ds, "newtable"

)      

'把從資料來源中選取的行新增到資料集中

"background-color: #ff0000"

'將資料集中為null值的字段值轉換為空值

fori = 0 

tods.tables(

"newtable"

).rows.count - 1  

forj = 0 

tods.tables(

"newtable"

).columns.count - 1  

ifisdbnull(ds.tables(

"newtable"

).rows(i)(j)) 

then

'判斷資料集中的每條記錄的每個字段是否為null,如果為null則,設定字段值為空值" "

ds.tables("newtable"

).rows(i)(j) = 

" "'將字段為null的值設定為空值" "

endif

next

next

return

ds                 

'返回沒有null值的資料集ds

catch

ex as

exception  

return

nothing

finally

call

closecmd(cmd)  

endtry

endfunction

當然,解決null值問題的方法還有很多,比如可以在設計資料庫表時,規定每個字段值不許為空:

還可以用isdbnull來判斷,等等。

資料庫 null值處理及元資料

我們已經知道 mysql 使用 sql select 命令及 where 子句來讀取資料表中的資料,但是當提供的查詢條 件字段為 null 時,該命令可能就無法正常工作。為了處理這種情況,mysql提供了三大運算子 is null 當列的值是 null,此運算子返回 true。is not null...

程式處理資料庫中值字段值為null的查詢顯示

1.如果你做了乙個簡單的註冊介面,需要使用者進行註冊,但有些項是不必要填的,當使用者完成註冊時,資料庫表中的相應欄位的值會寫入null,但如何將查詢的字段的值null顯示出來?2.首先我們學習一下如何向資料庫的相應字段插入null值,這就需要朋友們先了解一下dbnull 程式中的null值 當前臺的...

資料庫的null值

資料庫的null值給我開了乙個小玩笑,同時我也記住了以後遇到這種問題要怎麼處理了。在我的link表中backupid欄位只有2個值 2 和null。現在我想排除掉backupid字段值為2的記錄,剩下所有為null的記錄。我在pl sql中執行如下語句,得不得任何記錄結果 select from l...