none
VB.NET 收尋空值 出問題 RRS feed

  • 問題

  • 各位高手好 目前我的程式碼為

    Dim con As New MySqlConnection("charset=utf8 ;server=localhost; uid=root; pwd=; database=2017;")
    
     Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim COMMAND As New MySqlCommand("select 名子,號碼,住址,身分證 from `20177` where `ID`= '" & ID & "';", con)
            Try
                con.Open()
                Dim READER As MySqlDataReader = COMMAND.ExecuteReader
                While READER.Read
                        TextBox3.Text = READER.GetString("名子")
                        TextBox4.Text = READER.GetString("號碼")
                        TextBox5.Text = READER.GetString("住址")
                        TextBox2.Text = READER.GetString("身分證")
                End While
                con.Close()
            Catch ex As Exception
                MsgBox("有錯誤")
            End Try
        End Sub

    程式碼本身並無錯誤,問題出在於當資料是空值時會出現"有錯誤"

    例如:

    名子 號碼  住址 身分證  ID
    喝   01    01    01    1   >>>>"OK"
                                     2   >>>>"有錯誤"
           02                      3   >>>>"OK"

    我只知道跟While READER.Read有關,只要裡面其中一個有資料就不會錯誤

    我想了好久,我不知道怎麼修改它,而我還在找答案,希望各位高手能幫我看看


    • 已編輯 燒腦袋 2018年1月16日 上午 02:41
    2018年1月16日 上午 02:40

解答

  • 試試看有無改善:

           Dim COMMAND As New MySqlCommand("select 名子,號碼,住址,身分證 from `20177` where `ID`= '" & ID & "';", con)
            '記得之前很多前輩都會提醒 SQL injection 的說...
    
            Try
                con.Open()
                Dim READER As MySqlDataReader = COMMAND.ExecuteReader
                While READER.Read
                    '用 ToString 處理 NULL 的情況
                    TextBox3.Text = READER("名子").ToString()
                    TextBox4.Text = READER("號碼").ToString()
                    TextBox5.Text = READER("住址").ToString()
                    TextBox2.Text = READER("身分證").ToString()
                End While
                con.Close()
    
            Catch ex As Exception
                MsgBox(ex.Message) '有錯誤要給點提示嘛
    
            End Try
    


    Ader

    • 已標示為解答 燒腦袋 2018年1月17日 上午 01:30
    2018年1月16日 下午 12:33

所有回覆

  • 名子 號碼  住址 身分證  ID
    喝       01      01      01     1   >>>>"OK"
                                              2   >>>>"有錯誤"
               02                          3   >>>>"OK"
    SOR 排版沒排好
    2018年1月16日 上午 02:43
  • 目前是找到了一個方法

    Try
                Dim COMMAND As New MySqlCommand("select 名子,號碼,住址,身分證 from `20177` where `ID`= '" & ID & "';", con)
                Dim adapter As New MySqlDataAdapter(COMMAND)
                Dim table As New DataTable()
                adapter.Fill(table)
                TextBox3.Text = table.Rows(0)(0).ToString()
                TextBox4.Text = table.Rows(0)(1).ToString()
                TextBox5.Text = table.Rows(0)(2).ToString()
                TextBox2.Text = table.Rows(0)(3).ToString()
                con.Close()
            Catch ex As Exception
    
            End Try

    可不可以把它變成TextBox3.Text = table.Rows("名子").ToString()??

    還在想

    2018年1月16日 上午 03:05
  • 可以這樣試看看:

    TextBox3.Text = Convert.ToString(table.Rows(0)(0))
    

    2018年1月16日 上午 04:40
  • "有錯誤" 好難懂, 能否直接告知系統出現的例外訊息內容 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2018年1月16日 上午 05:57
    版主
  • tihs的方法跟TextBox3.Text = table.Rows(0)(0).ToString()

    所出來的結果一樣都可以用:)

    我是在想說

    如果我可以

    TextBox3.Text = table.Rows("名子").ToString()

    TextBox3.Text = Convert.ToString(table.Rows("名子"))

    這樣的話,我就不用擔心資料位子改變了

    我試過不能

    我之前都是

    Dim row As DataGridViewRow = DataGridView1.CurrentRow
                TextBox1.Text = row.Cells("名子").Value.ToString()

    但是我目前的程式碼不給用 它會說Cells不屬於它的屬性

    2018年1月16日 上午 06:46
  • 您需要的是建立具型別的DataSet, 請參考:

    Generate Strongly Typed DataSets

    2018年1月16日 上午 11:47
  • 試試看有無改善:

           Dim COMMAND As New MySqlCommand("select 名子,號碼,住址,身分證 from `20177` where `ID`= '" & ID & "';", con)
            '記得之前很多前輩都會提醒 SQL injection 的說...
    
            Try
                con.Open()
                Dim READER As MySqlDataReader = COMMAND.ExecuteReader
                While READER.Read
                    '用 ToString 處理 NULL 的情況
                    TextBox3.Text = READER("名子").ToString()
                    TextBox4.Text = READER("號碼").ToString()
                    TextBox5.Text = READER("住址").ToString()
                    TextBox2.Text = READER("身分證").ToString()
                End While
                con.Close()
    
            Catch ex As Exception
                MsgBox(ex.Message) '有錯誤要給點提示嘛
    
            End Try
    


    Ader

    • 已標示為解答 燒腦袋 2018年1月17日 上午 01:30
    2018年1月16日 下午 12:33
  • 謝謝高手們的幫忙

    原來只要把Rows刪掉就好了0.0

    謝謝您

    2018年1月17日 上午 01:30