vb.net - เชื่อมต่อฐานข้อมูลไม่ได้ MySQL ดูทั้งหมด

แก้ไขครั้งสุดท้ายโดย my2alee เมื่อ 2023-4-28 11:32

เครื่อง Server 1 + CentOS7.x + mysql mariadb10.1.x
เครื่อง Server 2 + CentOS8.x + mysql mariadb10.10.x

ผมเขียนโปรแกรมเชื่่อมต่อกับฐานข้อมูล กับ Server 1 ทุกอย่างทำงานปกติครับ
แต่ พอสลับมาเครื่อง Server 2 กับใช้ไม่ได้ พยายายหาวิธีแก้ปัญหามาพอสมควรครับ

รบกวนสอบถาม มันฟ้อง error ตามนี้ครับ

ปล.ผมใช้ V.2013 ลองบน 2022 ก็ไม่ได้ฟ้องเหมือนกัน

"Object cannot be cast from DBNull to other types"

'call Function
ccDataStrxx("select hospcode from hospcode where hospcode='" & HOSP_CODE & "'")

ส่วนโค้ดที่เกี่ยวข้องครับ
ปล.มือใหม่

'Connection DB
Public Function strconDb() As MySqlConnection
        LoadDataSetIniSetting() 'call function load file ini
        'variable connect database from .ini
        Dim strVarConn As String = "server=" & IP_DB & ";user id=" & USER_DB & ";password=" & PWD_DB & ";database=" & NAME_DB
        Return New MySqlConnection(strVarConn) 'return
    End Function

Public strcon As MySqlConnection = strconDb() 'connection
Public dbGetValuex As String 'field name get data


'Function Read Data
Public Sub ccDataStrxx(ByVal sql As String)
        Try
            cmd.Connection = strcon
            cmd.CommandText = sql

            strcon.Open() '<<<<<<<<<<< ถึงบรรทัดนี้ครับ จะแจ้ง error <<<<<<<<<<<<<<<<<

            dbread = cmd.ExecuteReader()

            If dbread.HasRows Then
                dbread.Read()
                dbGetValuex = dbread.GetValue(0).ToString()
            Else
                dbGetValuex = ""
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            strcon.Close()
        End Try
    End Sub

  • คัดลอกลิงก์ thongkorn
  • 2023-4-30 14:00:47
- strCon.Open เกิด Error เพราะหา Server ไม่เจอครับ
  1.     Public Sub ccDataStrxx(ByVal sql As String)
  2.         Dim cmd As New MySqlCommand
  3.         Try
  4.             If strcon.State = ConnectionState.Closed Then strcon.Open()
  5.             cmd.Connection = strcon
  6.             cmd.CommandText = sql
  7.             Dim dbread As MySqlDataReader = cmd.ExecuteReader
  8.             If dbread.HasRows Then
  9.                 dbread.Read()
  10.                 dbGetValuex = dbread.GetValue(0).ToString()
  11.             Else
  12.                 dbGetValuex = ""
  13.             End If
  14.         Catch ex As Exception
  15.             MessageBox.Show(ex.Message)
  16.         Finally
  17.             strcon.Close()
  18.         End Try
  19.     End Sub
  • คัดลอกลิงก์ my2alee
  • 2023-5-1 10:30:49
แก้ไขครั้งสุดท้ายโดย my2alee เมื่อ 2023-5-1 10:39
อ้างอิง: thongkorn ตอบกลับเมื่อ 2023-4-30 14:00
- strCon.Open เกิด Error เพราะหา Server ไม่เจอครับ

ทดสอบกับ VB6 ได้ทั้ง 2 Server ครับ อ.
ถ้า .net  Server 1 ได้ แต่กับ 2 ไม่ได้

ปรับโค้ดตาม อ. แล้วก็ยังเหมือนเดิมครับ
ผมไม่แน่ใจว่าอยู่ที่ การตั้งค่า my.cnf ของ mysql หรือเปล่า
หรือว่า .net framwork เวอร์ชั่น

  • คัดลอกลิงก์ thongkorn
  • 2023-5-1 13:00:31
อ้างอิง: my2alee ตอบกลับเมื่อ 2023-5-1 10:30
ทดสอบกับ VB6 ได้ทั้ง 2 Server ครับ อ.
ถ้า .net  Server 1 ได้ แต่กับ ...

ไม่น่าจะเกี่ยวกับ Framework หรอกครับ ผมทดสอบโค้ดก็โอเค ... ไม่รู้ว่าใช้ Debugger เป็นหรือเปล่า จากภาพให้เลื่อนเคอร์เซอร์ไปอยู่ในแถวที่เราต้องการทดสอบ แล้วกด Ctrl + F8 หรือ Run to Cursor (หรือคลิ๊กเมาส์ขวาก็จะเห็น) มันจะหยุดการทำงานในแถวที่เราต้องการ จากนั้นเคลื่อนเมาส์ไปที่ตัวแปร strVarConn เพื่อดูแพทเทิร์นของมันครับ ... (การใช้ปุ่มฟังค์ชั่นในการทำ Debugger ต้องดูเวอร์ชั่น Visual Studio ด้วยครับ)
  • Debugger.jpg
แก้ไขครั้งสุดท้ายโดย my2alee เมื่อ 2023-5-1 14:32
อ้างอิง: thongkorn ตอบกลับเมื่อ 2023-5-1 13:00
ไม่น่าจะเกี่ยวกับ Framework หรอกครับ ผมทดสอบโค้ดก็โอเค .. ...

ครับ ตามเม้นบนครับ
อ้างอิง: my2alee ตอบกลับเมื่อ 2023-5-1 14:31
ครับ ตามเม้นบนครับ

ไม่รู้ว่าได้หรือยังน่ะครับ แต่โค้ดที่ให้ผมมาดู และผมได้แก้ไขโค้ดให้บางส่วนทำงานได้อย่างถูกต้อง เช็คก่อนว่าติดต่อกับ Server อีกตัวได้หรือเปล่า ในภาพประกอบผมเชื่อมต่อ MySQL Server กับ Local Host (192.168.1.11) คือเครื่องตัวมันเอง และอีกเครื่องที่ผมแยกไปทำเป็น MySQL Server ไว้ครับ โดยฟิกไอพี 192.168.1.22 โดยทั้ง 2 เครื่องรันบน Windows 10 และ MySQL Server 5.7.17 ครับผม
  • MySQL.jpg
อ้างอิง: thongkorn ตอบกลับเมื่อ 2023-5-2 10:56
ไม่รู้ว่าได้หรือยังน่ะครับ แต่โค้ดที่ให้ผมมาดู และ ...

Ping เจอครับ อ.
อ้างอิง: my2alee ตอบกลับเมื่อ 2023-5-2 15:39
Ping เจอครับ อ.

ก็เหลือเช็คการทำงานของ MySQL Server ตัวที่ 2 แล้วล่ะครับ
อ้างอิง: thongkorn ตอบกลับเมื่อ 2023-5-2 18:26
ก็เหลือเช็คการทำงานของ MySQL Server ตัวที่ 2 แล้วล่ะครับ

ลองเอาโปรแกรมไปให้เพื่อนๆที่ รพ อื่นๆ ไปใช้ ก็เหมือนกันครับ ถ้าเป็น Cnetos8.x+mariadb10.10.x