公告版位

      因應有些人說我的blog都沒有新增加一些技術的東西,所以這幾天剛好實驗有用到PDA去控制MySQL資料庫,因此寫這個範例來提供給各位,希望都各位在程式上有所幫助,這樣我就值得了,呵呵

      好累啊! 寫完這篇花了一小時,再加上今天整天都在整理與找這類的程式,希望大家不要失望!

要寫這支程式的前提:
      (1) 請先去MySQL官方網站下載Connector/Net
      (2) 先加入「參考」,也就是「MySql.Data.CF.dll」檔案
      (3) 程式再加入「using MySql.Data.MySqlClient;」

注意:
(1) myConnection.Open();會出現Runtime Error,例外為IndexOutOfRangeException,有可能是您的Connector/Net 版本有問題! 像是就有人遇到自己的MySQL為5.0.9版的,但卻使用Connector/Net 6.x 版的,而造成myConnection.Open();會出現例外IndexOutOfRangeException,而改用了Connector/Net 5.2 後就可以成功連結到MySQL。
(2)  若myConnection.Open();會出現Runtime Error,例外為MissingManifestResourceException,有可能是PDA或模擬器沒連上網路。
(3)  如上第(2)點另一個可能,只要換PDA去跑程式,結果就不會有這個例外了! 但為什麼會這樣,我也不知道......>"<

PDA上C#搜尋MySQL資料的範例:

        private void Button_Click(object sender, EventArgs e)
        {
            //設定MySQL資料庫IP位址,此為localhost
            string DataSource = "localhost";
            //設定MySQL資料庫名稱,此為database_name
            string Database = "database_name";
            //設定連結MySQL資料庫使用者ID,此為admin
            string UserID = "admin";
            //設定連結MySQL資料庫使用者Password,此為1234567890
            string Password = "1234567890";

            string myConnectionString = "Data Source=" + DataSource +
                                  ";Database=" + Database +
                                  ";User ID=" + UserID +
                                  ";Password=" + Password;

            MySqlConnection myConnection = new MySqlConnection(myConnectionString);

            //設定要搜尋MySQL資料庫的語法
            //此為SELECT * FROM table
            //table為資料表名稱
            MySqlCommand myCommand = new MySqlCommand("SELECT * FROM table", myConnection);

            myConnection.Open();
            MySqlDataReader myReader;
            myReader = myCommand.ExecuteReader();
            try
            {
                searchTextBox.Text = string.Empty;
               
                while (myReader.Read())
                {
                    //myReader.GetString(0)為資料表裡的第一個欄位的資料
                    //myReader.GetString(1)為資料表裡的第二個欄位的資料
                    searchTextBox.Text += myReader.GetString(0) + " : " + myReader.GetString(1) + "\r\n";
                }
            }
            finally
            {
                myReader.Close();
                myConnection.Close();
            }
        }

 

PDA上C#「新增」、「修改」、「刪除」MySQL資料的範例:

        private void Button_Click(object sender, EventArgs e)
        {
            //設定MySQL資料庫IP位址,此為localhost
            string DataSource = "localhost";
            //設定MySQL資料庫名稱,此為database_name
            string Database = "database_name";
            //設定連結MySQL資料庫使用者ID,此為admin
            string UserID = "admin";
            //設定連結MySQL資料庫使用者Password,此為1234567890
            string Password = "1234567890";

            string myConnectionString = "Data Source=" + DataSource +
                                  ";Database=" + Database +
                                  ";User ID=" + UserID +
                                  ";Password=" + Password;

            MySqlConnection myConnection = new MySqlConnection(myConnectionString);

            //若要使用此刪除功能,請先將下面第二列「//」拿掉
            //以下這列語法為新增一筆資料進MySQL資料庫
            //string sql = "INSERT INTO table (username, phone) VALUES(dreamtails, 0921888888)";

            //若要使用此刪除功能,請先將下面第二列「//」拿掉
            //以下這列語法為修改username為dreamtails的電話成0921168168到MySQL資料庫
            //string sql = "UPDATE table SET phone=0921168168 WHERE username='dreamtails'";

            //若要使用此刪除功能,請先將下面第二列「//」拿掉
            //以下這列語法為刪除username為dreamtails的資料
            //string sql = "DELETE FROM table WHERE username='dreamtails'";


            MySqlCommand myCommand = new MySqlCommand(sql);
            myCommand.Connection = myConnection;
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myCommand.Connection.Close();
        }

 

MySQL Connectors檔案下載位址:
(1)
首頁 - http://dev.mysql.com/downloads/connector/
(2) Connector/Net - http://dev.mysql.com/downloads/connector/net/

參考資料來源:
(1)
Connector/NET Examples and Usage Guide:Using MySqlCommand - http://dev.mysql.com/doc/refman/5.0/en/connector-net-examples-mysqlcommand.html
(2) Connector/NET Examples and Usage Guide - http://dev.mysql.com/doc/refman/5.0/en/connector-net-examples.html
(3) MySQL 官方網站 - http://www.mysql.com/

以上範例若有錯誤,請各位告知或糾正,謝謝~~

dreamtails 發表在 痞客邦 PIXNET 留言(43) 人氣()


留言列表 (43)

發表留言
  • UANG
  • 請問一下妳是用甚麼版本的CONNECTOR?

    你的VS是2008的嗎?因為我用2008的有問題
  • 你好,我是使用Connector/Net 5.2,VS為2005.

    dreamtails 於 2009/05/07 00:06 回覆

  • 悄悄話
  • 悄悄話
  • 悄悄話
  • 悄悄話
  • 悄悄話
  • 悄悄話
  • 小筑
  • 我有問題!!

    請問 serchTextBox這個東西是什麼?我的工具箱裡面找不到?
    還有環境是用智慧型裝置嗎?我想寫的方式是要利用PC上面的PDA來進行C#連接mysql那我要用windows form應用裝置還是智慧型裝置呢??

    我是使用vs2008的!

    感激不盡ˇ
  • 小筑您好!!

    serchTextBox是TextBox的名稱,您在工具箱裡面應該要找「TextBox」!! 而您要在所謂的PC上面的PDA應該是說「PDA模擬器」吧!! 若是在PC上的PDA模擬器執行,則要選擇「智慧型裝置」!!

    不知道有沒有回答到您的問題,謝謝囉^^!!

    dreamtails 於 2009/08/14 02:20 回覆

  • 小筑
  • 你的回答很簡明易懂 我聽清楚了~!
    現下我又有一個問題想要問你~
    我的這一行程式碼會出現這樣的錯誤訊息!
    myConnection.Open(); 打不開並且會出現"MissingManifestResourceException未處理"

    請問你知道是哪方面出了問題嗎?
  • 您找到解答了^^!

    加油囉~~!

    dreamtails 於 2009/08/17 02:49 回覆

  • 小筑
  • 沒有問題了 !謝謝你唷~^^
  • 您找到問題了呀^^!!

    祝您程式順利~~!

    dreamtails 於 2009/08/17 02:48 回覆

  • ricky014
  • 可以請問作者小筑怎麼解決的嗎@@我也有遇到這個狀況,謝謝
  • 我也不清楚小筑是如何解決的,但想問您,資料庫的IP位置您是如何設定的^^!!

    dreamtails 於 2009/08/24 10:52 回覆

  • ricky014
  • 您好,我的ip位置設定為http://127.0.0.1,不知道這樣對不對,我也設定過localhost。
  • 您的資料庫IP要設定實體IP,不是localhost與127.0.0.1。

    還有,您要注意資料庫是否有開放給非localhost的外來連線,否則資料庫可能也不會給外來的IP連結讀取資料庫!

    dreamtails 於 2009/08/24 11:37 回覆

  • ricky014
  • 您好,我的網路沒有實體IP,該怎麼設定才行?我查了滿多的資料,也試了滿多種方式,都沒成功,另外資料庫要如何設定開放給非localhost的外來連線呢?謝謝你
  • 這篇為「允許別部電腦連結MySQL」
    http://dreamtails.pixnet.net/blog/post/22185485

    若沒有實體IP,這個問題我就沒有遇到過了!! 或是設定看看區網的ip看看!

    dreamtails 於 2009/08/24 20:21 回覆

  • 囧男孩
  • 您好 我在連線上遇到問題了,可否請教一下

    您好,您的文章讓我解決了很多問題,但我在連線上遇到了麻煩,狀況是這樣
    string DataSource = "192.168.1.230";
    string Database = "test";
    string UserID = "root";
    string Password = "";
    我從隔壁電腦用資料庫軟體確定可以連進來,VS2008執行時在
    myConnection.Open();
    這一行一直出現IndexOutOfRangeException,不知是否有相同經驗可以提示一下
    環境是VS2008 (192.168.1.230)
    CE 5.0 Emulator (192.168.1.231)測試
  • 出現IndexOutOfRangeException會不會是您的SQL語法下的超出範圍了>"<

    dreamtails 於 2009/09/04 00:37 回覆

  • 囧男孩
  • 剛剛實驗了一下 在windows form 上實驗沒問題,但是在 CE 5.0 emulator 跟ce 4.2實體設備上都會有IndexOutOfRangeException ~~~囧 救人阿
  • 「windows form」是Mobile端的C#嗎? 還是在PC上的C#?

    dreamtails 於 2009/09/04 00:39 回覆

  • 吳竑邑
  • 請問MySql.Data.CF.dll要到哪邊下載@@?

    我是個新手,一直找不到
  • 先去MySQL官方網站下載Connector/Net

    下載網頁:http://dev.mysql.com/downloads/connector/net/

    下載後,裡面應該會有!!!!!!!

    dreamtails 於 2009/09/10 19:11 回覆

  • 阿倫
  • 請問一下如何讀取某行某列的資料?感恩
  • 這個可能就要看您要讀哪一行,可能要在迴圈裡下判斷式了!
    至於讀到了您要的那行的話,就可以讀取您要的欄位了^^!

    dreamtails 於 2009/09/25 19:09 回覆

  • ifwelove
  • 可以請問一下不要在pda上

    只要在電腦上用c#連接mysql 要怎麼做?

    還有新增 修改 刪除

    目前一頭霧水= =

  • 嗯......我沒有寫過耶,但方法應該也差不了多少,可以自行試試囉!

    從錯誤中學習!!

    dreamtails 於 2009/10/06 21:58 回覆

  • IFWELOVE
  • 那可以請問一下哪裡有中文的參考資料嗎C#連MYSQL的
    我自己有用成功 但是不知道怎麼用語法抓出資料庫的值來應用
    只有成功用視窗連到資料庫 SHOW裡面的資料
  • 那您可以show資料,不就可以將資料顯示出來了!
    若要應用的話,可以用if來找看哪個使用者而只顯示那個使用者的資料!

    不知道有沒有回答到您的問題!

    dreamtails 於 2009/10/08 02:09 回覆

  • IFWELOVE
  • 例如你上面打的MYREADER.GETSTRING(0)
  • 您可以用如下來判斷出一筆資料,然後在顯示其他的欄位資料:

    if(myReader.GetString(0) == "John")
    {
    nameTextBox.Text = myReader.GetString(0);
    telTextBox.Text = myReader.GetString(1);
    }

    dreamtails 於 2009/10/08 02:14 回覆

  • SUE
  • 請問板大可以放原始檔嗎或是指點一下小弟
    小弟這一行 用PDA模擬器執行 按下button會跳出例外
    MySqlConnection myConnection = new MySqlConnection(myConnectionString);
  • 是出現什麼樣子的例外!? 謝謝^^!

    dreamtails 於 2009/10/23 00:05 回覆

  • SUE
  • 抱歉版大我手殘打錯
    但是我又有新問題了
    我在WINDOWS專案裡面可以正常使用
    但是在智慧型裝置的專案裡用PDA模擬時
    卻會出現跟前面小筑大一樣的問題



  • ^^

    dreamtails 於 2009/10/23 12:44 回覆

  • SUE
  • 板大你好 我解決上面的問題了
    但是我又有新問題!
    程式碼在windowsApplication專案皆能正常
    在智慧型專案 Debug通過 模擬pda時 觸發button
    會出現無法與遠端網路連接(有用ActiveSync)
    裝在實體PDA上(USB接PC)也有同樣問題
    這個是因為IP設localhost的問題嗎?
    打擾.
  • 您可能要設ip位址看看,若設localhost可能會連到自己原本的裝置,如pda^^!!

    dreamtails 於 2009/10/23 12:43 回覆

  • SUE
  • 謝謝板大的回覆
    不過目前IP只有1個
    要找同學再來試試
  • 對了,若你是用mysql,你mysql好像要開啟外來的ip,要不然預設localhost以外的好像都不能連^^!!

    dreamtails 於 2009/10/23 22:51 回覆

  • WIKI
  • 您好,我跳出的錯誤是MissingManifestResourceException不知道該怎麼辦
    錯誤出在myConnection.Open();這行
    我的MySQL版本是: 5.0.51a
    我的做法是在本機電腦連線到遠端固定IP的SERVER抓資料
    拜託您了~
    我已經試了好幾天不知道該怎麼辦
  • 會是PDA或模擬器沒連上網路嗎!?

    dreamtails 於 2009/11/02 19:06 回覆

  • WIKI
  • 我引入的是MySql.Data.CF.dll參考
    用的環境是VS2008
    自己寫PHP網頁存取操作資料庫內容都沒有問題
    也有using MySql.Data.MySqlClient;
    拜託您了

    感恩~
  • 或是您的MySQL沒有開啟對外的權限,也就是給localhost以外的ip連結!?

    dreamtails 於 2009/11/02 19:07 回覆

  • WIKI
  • 噢~感謝版大的迅速回應!!
    剛才我確認了一下,
    模擬器有連上網了MySQL對外的權限也有開~

  • 請問您的MySql.Data.CF.dll版本多少的!?
    6.x或5.x!?

    謝謝^^!

    dreamtails 於 2009/11/03 01:02 回覆

  • WIKI
  • 感謝您~
    我試的MySql.Data.CF.dll版本是5.1
    我也有試過5.0的版本
    但依然不能用~~~
  • 這個呀= =
    我也不知道怎麼解決了>"<
    抱歉@@"

    dreamtails 於 2009/11/03 22:34 回覆

  • WIKI
  • 您好~我剛才從新建立一個專案,從新設定參考MySql.Data.CF.dll
    現在的問題是Reading from the stream has failed.
    感謝您
  • 這是什麼!? 我沒有遇見過XDDD
    有更詳細的情況嗎!?

    dreamtails 於 2009/11/03 22:35 回覆

  • WIKI
  • 這是MySQL的一個BUG,用5.0的Connecter會發生這個問題
    參考網址如下:
    http://bugs.mysql.com/bug.php?id=25151
    但網頁裡有寫道
    A patch for this bug has been committed. After review, it may
    be pushed to the relevant source trees for release in the next
    version. You can access the patch from:

    http://lists.mysql.com/commits/17173

    是我要下載那個補丁包的意思嗎?
    但是我一直找不到連結呀~
    求求版大可以幫幫我嗎
    感恩感恩~
  • 那您去下載Connecter 5.2的試試看行不行 >"<
    只有多試了!

    因為我也沒有遇過這些情況!!
    抱歉,不能百分之百的回答到您的問題!

    dreamtails 於 2009/11/04 20:11 回覆

  • WIKI
  • 哈哈~我現在已經陷入困境了
    我確定模擬器已經連上網路,但依然會出現下面這些例外
    用5.1版的錯誤也是Reading from the stream has failed
    用5.2版的錯誤是MissingManifestResourceException
    沒關係~還是感謝您的幫忙
    謝謝~
  • 嗚嗚嗚~~~~~~!

    不能幫到您,真的很不好意思>"<

    dreamtails 於 2009/11/04 23:19 回覆

  • 好自在
  • 大大:
    我有一些問題,我現在我照著你上面的方式使用,也是遇到BUG,我不管用哪一版的都是會有MissingManifestResourceException的問題!!在connection.open()的地方就是會error,所以想請問一下大大現在是否已經有解決方法了!!


  • 看看您的database有沒有開權限可以連! 確定自己的PDA有連上網路! 程式裡連database的ip等相關資訊正不正確,若還是不行,可能還要試試其它方式去找出原因了......>"<

    不好意思,好像沒有解決到您的問題,因為您的描述我也不太了解詳細的環境......Sorry...!

    dreamtails 於 2010/01/31 00:00 回覆

  • 擄夫
  • 請問一下 我顯示是以dataGridView來顯示
    但我想修改,資料庫的資料可以嗎??
    而且修改的地方不定 不是各確定目標
    請大大是否能幫我一下
  • 不好意思,dataGridView我真的沒有動過,所以有沒辦法告訴您,相關的資訊! 但您可以去找找看有沒有相關dataGridView相關的使用或操作方法!

    dreamtails 於 2010/04/06 13:09 回覆

  • 小小哈比
  • 謝謝大大詳細教學

    馬上練習去~
  • ^___^

    dreamtails 於 2010/04/11 17:50 回覆

  • 黑人
  • 請問大大如果伺服端改用SQL SEVER 2008 那要怎麼改?
    還有伺服端 是不是要寫一個接收資料的程式
    但是我到現在還是不太懂
    可以麻煩您告訴我該怎麼做嗎
    感謝
  • 照理說,伺服器應該是不用設定,除非SQL Server 2008有特別要設定的,您還是去微軟找找資料吧! 提供您這些建議希望會有用!!

    dreamtails 於 2010/04/14 22:32 回覆

  • 摸摸
  • 想請教有關MYSQL+VS2008用C#測試連線

    您好,我看課本用SQL SERVER連線去改MYSQL
    去測試是否有連線成功,可是他一直出現'mysqlConnection' 不包含使用 '1' 引數的建構函式
    不知道為什麼出不來耶..
    我使用MySQL Connector Net 6.2.3 & MySQL Server 5.1

    可以寄mail給我嗎??
    我怕會看不到你回應給我的!
    麻煩你了^^(roseate_devil@hotmail.com)
  • 您的MySQL為5.1

    那您就試看看MySQL Connector Net 5.1.x的版本吧!
    http://dev.mysql.com/downloads/connector/net/5.1.html

    看看可不可以解決您的問題.

    dreamtails 於 2010/07/08 16:17 回覆

  • 摸摸
  • 謝謝^^

    你好,謝謝你回應我!
    我剛剛努力再測了一下,,
    把using MySql.Data.MySqlClient;
    重新再打一次,,
    下面的測試連結也重打了,,
    結果就對了^^
    不知道是不是大小寫的問題呢,,害我卡超久!
    不過也謝謝你!
  • 哇! 我還以為要用5.1.x 的Connector才可以,那也謝謝您的回覆!

    讓我學到新版本也是可以使用的^^!

    dreamtails 於 2010/07/08 16:19 回覆

  • luckycatday
  • 呵呵!我當初也以為不行,不過經過測試是可以的!
    晚點要來測試GridView,,抓資料,,
    希望會成功摟,,^_^
  • 希望您一切順利^^!

    dreamtails 於 2010/07/08 16:31 回覆

  • 阿翰
  • 請問一下
    可以封裝成cab檔給pda安裝嗎
    我封裝都會顯示
    "Windows CE 封包精靈發生錯誤。請參閱輸出視窗中的詳細資訊。"

    是哪出了問題呢
    vs2008
    Connector/Net 6.3.5

  • 不好意思,這個我也沒試過耶! 所以也沒辦法回答您!

    dreamtails 於 2010/11/08 21:00 回覆

  • Polar
  • 請問一下! 我找不到MySql.Data.Tests.CF.dll 檔案有,但是在VS2008專案選加入參考,但是看不到那個dll
  • bear
  • 請問大大有VB得範例程式嗎?
  • 學習
  • 我在執行時候跑到myConnection.Open();就會出現下面的錯誤!請問大大是哪邊會有問題呀,因為我那模擬器也可以上網IP設定也是對的~會有哪邊可能出現問題呢?
    System.Resources.MissingManifestResourceException 未處理
    Message="MissingManifestResourceException"
    StackTrace:
    於 System.Resources.ResourceManager.InternalGetResourceSet()
    於 System.Resources.ResourceManager.InternalGetResourceSet()
    於 System.Resources.ResourceManager.InternalGetResourceSet()
    於 System.Resources.ResourceManager.GetString()
    於 MySql.Data.MySqlClient.Properties.Resources.get_UnableToConnectToHost()
    於 MySql.Data.MySqlClient.NativeDriver.Open()
    於 MySql.Data.MySqlClient.Driver.Create()
    於 MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
    於 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
    於 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
    於 MySql.Data.MySqlClient.MySqlPool.GetConnection()
    於 MySql.Data.MySqlClient.MySqlConnection.Open()
    於 SmartDeviceProject1.Form1.button1_Click()
    於 System.Windows.Forms.Control.OnClick()
    於 System.Windows.Forms.Button.OnClick()
    於 System.Windows.Forms.ButtonBase.WnProc()
    於 System.Windows.Forms.Control._InternalWnProc()
    於 Microsoft.AGL.Forms.EVL.EnterMainLoop()
    於 System.Windows.Forms.Application.Run()
    於 SmartDeviceProject1.Program.Main()
    InnerException:
  • 大明
  • 謝謝你的範例!
    我成功了:)
    很感謝你