Skip to main content

Visual Basic .Net 程式案例學習: 07. My SQL 與 VB.NET (2014版)

Visual Basic .Net 程式案例學習: 07. My SQL 與 VB.NET (2014版)

Visual Basic .Net 程式案例學習: 07. My SQL 與 VB.NET (2014版)

7.1 問題

My SQL是一套有效率的資料庫系統,雖說無法完全與MS SQL媲美,但其效能及架構卻十分令人讚賞,唯一的缺點就是對於亞洲字碼支援有問題,利用Google搜尋My SQL、亂碼,就可以找到209,000筆的資料,可見這個問題相當困難,更別說用Google搜尋My SQL、.NET、UTF8,可以找到2,600,000筆的資料。因為中文字體在My SQL內多數採用UTF8來編碼,而My SQL所釋放的My SQL Connector/Net是不支援中文字體,雖然可以成功的連結資料庫,但使用My SQL所釋放的原始碼,下載的中文字都是亂碼。當然My SQL也是有版本之分,3.x版的對亞洲字碼就不大友善,5.x以後就比較好。

但是我們想要有My SQL的便利及效率,又要使用.NET來開發程式,這該怎麼辦呢?本章將有詳細的解答。

7.2 需求

表格 7‑1 「My SQL 與 VB.NET」系統目的分析表

版本:1.0  要做什麼   不要做什麼(不要做不代表不會做)  
能做什麼 (第一格:必要項目) (第二格:次要項目)
要能由My SQL資料庫中讀取UTF8的中文字碼。  無。
使用.NET設計程式。
使用者無須做任何設定。
不能做什麼(不能做代表不需要做)  (第三格:不必要項目)   (第四格:不需要項目)
無。 無。

表格 7‑2 「My SQL 與 VB.NET」系統目標分析表

版本:  重要   不重要  
優先 (重) (急)
要能由My SQL資料庫中讀取UTF8的中文字碼。  無。
使用.NET設計程式。
使用者無須做任何設定。
不急迫 (輕) (緩)
無。 無。

表格 7‑3 「My SQL 與 VB.NET」系統規格表

規格項目   規格內容    備註
主要功能 要能由My SQL資料庫中讀取UTF8的中文字碼。 
使用.NET設計程式。
使用介面 使用者無須做任何設定。

7.3 特色

特點就是獨家採用.NET與My SQL合作的資料庫程式,並且獨家公佈解決中文編碼的問題,目前尚未有人公佈編碼問題的解法,連My SQL官網對這個問題也遲了一年之久,尚未解決。

7.4 使用工具

語言 軟體
Visual Basic .NET MS Visual Studio 2005 .NET、My SQL

7.5 系統架構

如何架設My SQL Server的方法就不再贅述,因為您會使用到這章,想必已經會架設My SQL Server了,就筆者所知因為授權的條件,許多嵌入式系統還是使用3.x版本,而3.x版本因為時間比較久,因此接受過許多試煉,解決方案也比較多,而5.x版比較新,因此問題的解決方案就比較少。目前最新版本的是6.x版。

筆者在這裡遇到的問題是連接3.x版,所下載的字碼都是呈現亂碼,自行找到解決方案之後,在此公佈給各位讀者參考。

由於My SQL Connector/Net對亞洲字碼的支援不足,因此我們採用MySQL Connector/ODBC,當然為了使用者的便利性,我們把設定寫在程式中,而無須讓使用者去做設定,使用者的電腦只要有安裝MySQL Connector/ODBC即可。

首先透過MySQL Connector/ODBC連結My SQL資料庫,連結成功之後,我們將把UTF8的字碼,下載下來,下載的過程中逐一轉碼,將UTF8轉為正確的字碼。

7.6 程式實作

7.6.1 Visual Basic 2005 的程式碼


       ‘宣告連接字串變數

        Dim strCnn As String

        ‘設定ODBC連接字串

        strCnn = “Driver={MySQL Connector/ODBC v5};” + _

                         “Server=” + “127.0.0.1” + “;” + _

                         “Port=3306;” + _

                         “Option=3;CHARSET=utf8;” + _

                         “Database=smartlock;” + _

                         “UID=reader;” + _

                         “PWD=reader;”

        Try

            ‘宣告並建立連接資料庫物件

            Dim objMyCnn As New OdbcConnection(strCnn)

            ‘開啟資料庫

            objMyCnn.Open()

        Catch ex As Exception

            MessageBox.Show(“連接資料庫失敗。”)

        End Try

        ‘宣告資料庫轉接器

        Dim objMyDA As OdbcDataAdapter

        ‘宣告並建立資料集

        Dim GlobalDS As New DataSet()

        ‘建立資料表連結

        objMyDA = New OdbcDataAdapter(“Select * From table1”, objMyCnn)

        ‘設定查詢命令連結

        objMyDA.SelectCommand.Connection = New OdbcConnection(strCnn)

        ‘將table1的資料填入GlobalDS

        objMyDA.Fill(GlobalDS, “table1”)

        ‘宣告資料列

        Dim drTmp As DataRow

        ‘宣告資料欄

        Dim dcTmp As DataColumn

        ‘宣告字串變數

        Dim strData As String

        ‘巡覽資料列

        For Each drTmp In GlobalDS.Tables(“table1”).Rows

            ‘巡覽資料欄

            For Each dcTmp In GlobalDS.Tables(“table1”).Columns

                ‘獲得資料字串

                strData = drTmp(dcTmp).ToString()

                ‘顯示資料字串

                MessageBox.Show(strData)

            Next

        Next

7.6.2 Visual C# 2005 的程式碼


‘檢查是否已有連接

if (objMyCnn != null)

{

    ‘關閉連接

    objMyCnn.Close();

}

‘宣告並設定ODBC連結字串

string strCnn = “Driver={MySQL Connector/ODBC v5};” +

                        “Server=127.0.0.1;” +

                        “Port=3306;” +

                        “Option=3;CHARSET=utf8;” +

                        “Database=smartlock;” +

                        “UID=reader;” +

                        “PWD=reader;”;

try

{

        ‘建立連接資料庫物件

        objMyCnn = new OdbcConnection(strCnn);

        ‘開啟連接

        objMyCnn.Open();

        ‘建立資料集

        GlobalDS = new DataSet();

}

catch (OdbcException ex)

{

        MessageBox.Show(ex.Message);

        return;

}

‘建立資料轉接器

daMyDA = new OdbcDataAdapter(“SELECT * FROM table1”, objMyCnn);

‘將table1的資料填入GlobalDS

daMyDA.Fill(GlobalDS, “table1”);

‘釋放資料轉接器

daMyDA.Dispose();

‘宣告資料字串變數

string strData;

‘巡覽資料列

foreach (DataRow drTmp in GlobalDS.Tables[“table1”].Rows)

{

      ‘巡覽資料欄

      foreach (DataColumn dcTmp in GlobalDS.Tables[“table1”].Columns)

      {

            ‘獲得資料欄位字串

            strData = drTmp[dcTmp].ToString();

            ‘宣告位元組變數

            byte[] b;

            ‘設定位元組長度

            b = new byte[strData.Length];

            ‘巡覽所有位元組

            for (int intJ = 0; intJ < strData.Length; intJ++)

            {

                ‘將每個字轉換為字元

                char k = (char)System.Convert.ChangeType(strData.Substring(intJ, 1), typeof(char));

                ‘將字元轉型為位元組

                b[intJ] = (byte)k;

            }

            ‘透過Encoding.UTF8編碼位元組為字串

            MessageBox.Show((string)Encoding.UTF8.GetString(b));

      }

}

7.7 修改重點

由於轉碼的動作會耗掉許多時間,因此不建議一邊轉碼一邊執行程式,這樣會讓程式效率變得很低,筆者的方式是先將所有資料表轉換成文字檔,在將文字檔匯入到MS Access的資料庫中,而後透過與MS Access資料庫連結,就可以採用Crystal Report製作報表或者是做資料的處理,若直接與My SQL作處理的話,反到效能不彰。筆者調查的結果似乎這項問題只有對亞洲字碼才有,其他西歐語系的字碼到是很少有討論到這類的問題。

7.8 結論

其實My SQL授權方案並非是最省成本的,而採用My SQL是大多是因為可以作為嵌入式系統的資料庫,而My SQL每個版本的差異都很大,因此建議只要熟悉某一個版本就可以了,因為每個版本所遇到的問題都不盡相同,開發的時候,只要針對一個版本,這樣會比較保險。

image.png
Lai Tai-Yu (賴岱佑)

Popular Posts

波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

最佳化處理策略之快速消除扭曲演算法

Python 日期與時間的處理

波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

Image

最佳化處理策略之快速消除扭曲演算法

Image

Python 日期與時間的處理

Image

Visual Basic 6.0 程式案例學習: 10. 條碼列印程式 (2014版)

Image

Visual Basic .Net 程式案例學習: 06. 題庫測驗系統 (2014版)

Image

修復損毀的 SQLite DB 資料庫

Image

用10種程式語言做影像二值化(Image binarization)

Image

解決 ValueError: If using all scalar values, you must pass an index

Image

Visual Basic 6.0 程式案例學習: 04. 人事考勤管理系統 (2014版)

Image

Visual Basic 6.0 程式案例學習: 07. 收據列印程式 (2014版)

Image

佑佑的 Line 貼圖創作

貼圖作者網址:

https://line.me/S/shop/sticker/author/3883362

靜態貼圖

 
 
 
 
  牡羊座:狗狗角色

作者:佑佑
依照牡羊座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  金牛座:兔兔角色

作者:佑佑
依照金牛座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  雙子座:貓貓角色

作者:佑佑
依照雙子座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  巨蟹座:倉鼠角色

作者:佑佑
依照巨蟹座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  獅子座:幼獅角色

作者:佑佑
依照獅子座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  處女座:松鼠角色

作者:佑佑
依照處女座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  天秤座:鴿子角色

作者:佑佑
依照天秤座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  天蠍座:鳳凰角色

作者:佑佑
依照天蠍座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  射手座:人馬角色

作者:佑佑
依照射手座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  魔羯座:山羊角色

作者:佑佑
依照魔羯座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  水瓶座:海豚角色

作者:佑佑
依照水瓶座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  雙魚座:小丑魚角色

作者:佑佑
依照雙魚座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  上班族都變成狒狒,心裡想要說的話。

作者:佑佑
最近在台灣走紅的狒狒,用擬人化的方式,變成上班族,畫出心裡的想說的話。
購買貼圖
  接案派遣的日常

作者:佑佑
接案派遣到其他公司的日常對話,有調皮、正經、日常對話。
購買貼圖
  貓女事務員的搞笑時刻

作者:佑佑
把行政人員在職場上遇到千奇百怪的事情畫出來,用可愛的貓女來擔任行政人員的代言人。
購買貼圖
  貓貓說每天都會用到的話

作者:佑佑
日常生活常見的短句,用小貓擬人化的方式呈現,比較親切可愛。
購買貼圖
 
     
  大人的煩惱特輯:小兔角色

作者:佑佑
錢包餓了,生活苦了。變美變健康?先讓我睡飽吧。心好累,我需要充電。
購買貼圖
     

動態貼圖

 
 
 
 
  牡羊座日常交際:狗狗角色

作者:佑佑
依照牡羊座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  金牛座日常交際:兔兔角色

作者:佑佑
依照金牛座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  雙子座日常交際:貓貓角色

作者:佑佑
依照雙子座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  巨蟹座日常交際:倉鼠角色

作者:佑佑
依照巨蟹座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  獅子座日常交際:幼獅角色

作者:佑佑
依照獅子座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  處女座日常交際:松鼠角色

作者:佑佑
依照處女座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  天秤座日常交際:鴿子角色

作者:佑佑
依照天秤座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  天蠍座日常交際:鳳凰角色

作者:佑佑
依照天蠍座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  射手座日常交際:人馬角色

作者:佑佑
依照射手座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  魔羯座日常交際:山羊角色

作者:佑佑
依照魔羯座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  水瓶座日常交際:海豚角色

作者:佑佑
依照水瓶座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  雙魚座日常交際:小丑魚角色

作者:佑佑
依照雙魚座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
 
     
  厭世報:鬍渣男

作者:佑佑
厭世總有個理由跟原因,實在是令人不爽,為什麼最倒楣的總是我?真希望明天就是世界末日,讓大家都一樣慘。
購買貼圖
     

表情貼

 
 
 
 
  貓貓說每天都用得到的表情貼

作者:佑佑
日常生活常見的表情用語,用小貓擬人化的方式呈現,比較親切可愛。
購買貼圖
  天秤座的表情貼:鴿子角色

作者:佑佑
日常生活常見的表情用語,天秤座的鴿子擬人化方式呈現,比較親切可愛。
購買貼圖
  天蠍座的表情貼:鳳凰角色

作者:佑佑
日常生活常見的表情用語,天蠍座的鳳凰擬人化方式呈現,比較親切可愛。
購買貼圖
  射手座的表情貼:人馬角色

作者:佑佑
日常生活常見的表情用語,射手座的人馬擬人化方式呈現,比較親切可愛。
購買貼圖
 
 
 
 
  魔羯座的表情貼:山羊角色

作者:佑佑
日常生活常見的表情用語,魔羯座的山羊擬人化方式呈現,比較親切可愛。
購買貼圖
  水瓶座的表情貼:海豚角色

作者:佑佑
日常生活常見的表情用語,水瓶座的海豚擬人化方式呈現,比較親切可愛。
購買貼圖
  雙魚座的表情貼:小丑魚角色

作者:佑佑
日常生活常見的表情用語,雙魚座的小丑魚擬人化方式呈現,比較親切可愛。
購買貼圖