天天看點

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

在做機房收費系統時,每當從資料庫中查找資料并顯示到窗體界面時,如果查詢的記錄中有字段值為NULL時,就會報錯:

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

比如:(例子可能不恰當,因為注冊時不允許不輸入學生姓名。但是就是那個意思)卡号1(學号為1)上機時,在上機界面要顯示上機資訊:學号、姓名、性别、系别….. 。(上機時要聯結三個表:CardInfo、StudentInfo、OnOffLine。這裡就不細說了)但是,在從StudentInfo表中查詢資訊時,“學号”字段為NULL,此時就會發生以上錯誤。

以下是我的StudentInfo表:

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

如何解決??

首先,我們知道要想把表中的資料顯示到界面,就需要定義的函數傳回一個實體或一個資料表或一個資料集。由于顯示上機涉及到不止一個表,是以我的是傳回資料集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")      '把從資料源中選取的行添加到資料集中

 

            '将資料集中為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

 
           Return ds                 '傳回沒有NULL值的資料集ds

         Catch ex As Exception

            Return Nothing

 

        Finally

            Call CloseCmd(cmd)

        End Try

 

    End Function

 

           

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

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

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

繼續閱讀