因應有些人說我的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/
以上範例若有錯誤,請各位告知或糾正,謝謝~~

請問一下妳是用甚麼版本的CONNECTOR? 你的VS是2008的嗎?因為我用2008的有問題
你好,我是使用Connector/Net 5.2,VS為2005.
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
請問 serchTextBox這個東西是什麼?我的工具箱裡面找不到? 還有環境是用智慧型裝置嗎?我想寫的方式是要利用PC上面的PDA來進行C#連接mysql那我要用windows form應用裝置還是智慧型裝置呢?? 我是使用vs2008的! 感激不盡ˇ
小筑您好!! serchTextBox是TextBox的名稱,您在工具箱裡面應該要找「TextBox」!! 而您要在所謂的PC上面的PDA應該是說「PDA模擬器」吧!! 若是在PC上的PDA模擬器執行,則要選擇「智慧型裝置」!! 不知道有沒有回答到您的問題,謝謝囉^^!!
你的回答很簡明易懂 我聽清楚了~! 現下我又有一個問題想要問你~ 我的這一行程式碼會出現這樣的錯誤訊息! myConnection.Open(); 打不開並且會出現"MissingManifestResourceException未處理" 請問你知道是哪方面出了問題嗎?
您找到解答了^^! 加油囉~~!
沒有問題了 !謝謝你唷~^^
您找到問題了呀^^!! 祝您程式順利~~!
可以請問作者小筑怎麼解決的嗎@@我也有遇到這個狀況,謝謝
我也不清楚小筑是如何解決的,但想問您,資料庫的IP位置您是如何設定的^^!!
您好,我的ip位置設定為http://127.0.0.1,不知道這樣對不對,我也設定過localhost。
您的資料庫IP要設定實體IP,不是localhost與127.0.0.1。 還有,您要注意資料庫是否有開放給非localhost的外來連線,否則資料庫可能也不會給外來的IP連結讀取資料庫!
您好,我的網路沒有實體IP,該怎麼設定才行?我查了滿多的資料,也試了滿多種方式,都沒成功,另外資料庫要如何設定開放給非localhost的外來連線呢?謝謝你
這篇為「允許別部電腦連結MySQL」 http://dreamtails.pixnet.net/blog/post/22185485 若沒有實體IP,這個問題我就沒有遇到過了!! 或是設定看看區網的ip看看!
您好,您的文章讓我解決了很多問題,但我在連線上遇到了麻煩,狀況是這樣 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語法下的超出範圍了>"<
剛剛實驗了一下 在windows form 上實驗沒問題,但是在 CE 5.0 emulator 跟ce 4.2實體設備上都會有IndexOutOfRangeException ~~~囧 救人阿
「windows form」是Mobile端的C#嗎? 還是在PC上的C#?
請問MySql.Data.CF.dll要到哪邊下載@@? 我是個新手,一直找不到
先去MySQL官方網站下載Connector/Net 下載網頁:http://dev.mysql.com/downloads/connector/net/ 下載後,裡面應該會有!!!!!!!
請問一下如何讀取某行某列的資料?感恩
這個可能就要看您要讀哪一行,可能要在迴圈裡下判斷式了! 至於讀到了您要的那行的話,就可以讀取您要的欄位了^^!
可以請問一下不要在pda上 只要在電腦上用c#連接mysql 要怎麼做? 還有新增 修改 刪除 目前一頭霧水= =
嗯......我沒有寫過耶,但方法應該也差不了多少,可以自行試試囉! 從錯誤中學習!!
那可以請問一下哪裡有中文的參考資料嗎C#連MYSQL的 我自己有用成功 但是不知道怎麼用語法抓出資料庫的值來應用 只有成功用視窗連到資料庫 SHOW裡面的資料
那您可以show資料,不就可以將資料顯示出來了! 若要應用的話,可以用if來找看哪個使用者而只顯示那個使用者的資料! 不知道有沒有回答到您的問題!
例如你上面打的MYREADER.GETSTRING(0)
您可以用如下來判斷出一筆資料,然後在顯示其他的欄位資料: if(myReader.GetString(0) == "John") { nameTextBox.Text = myReader.GetString(0); telTextBox.Text = myReader.GetString(1); }
請問板大可以放原始檔嗎或是指點一下小弟 小弟這一行 用PDA模擬器執行 按下button會跳出例外 MySqlConnection myConnection = new MySqlConnection(myConnectionString);
是出現什麼樣子的例外!? 謝謝^^!
抱歉版大我手殘打錯 但是我又有新問題了 我在WINDOWS專案裡面可以正常使用 但是在智慧型裝置的專案裡用PDA模擬時 卻會出現跟前面小筑大一樣的問題
^^
板大你好 我解決上面的問題了 但是我又有新問題! 程式碼在windowsApplication專案皆能正常 在智慧型專案 Debug通過 模擬pda時 觸發button 會出現無法與遠端網路連接(有用ActiveSync) 裝在實體PDA上(USB接PC)也有同樣問題 這個是因為IP設localhost的問題嗎? 打擾.
您可能要設ip位址看看,若設localhost可能會連到自己原本的裝置,如pda^^!!
謝謝板大的回覆 不過目前IP只有1個 要找同學再來試試
對了,若你是用mysql,你mysql好像要開啟外來的ip,要不然預設localhost以外的好像都不能連^^!!
您好,我跳出的錯誤是MissingManifestResourceException不知道該怎麼辦 錯誤出在myConnection.Open();這行 我的MySQL版本是: 5.0.51a 我的做法是在本機電腦連線到遠端固定IP的SERVER抓資料 拜託您了~ 我已經試了好幾天不知道該怎麼辦
會是PDA或模擬器沒連上網路嗎!?
我引入的是MySql.Data.CF.dll參考 用的環境是VS2008 自己寫PHP網頁存取操作資料庫內容都沒有問題 也有using MySql.Data.MySqlClient; 拜託您了 感恩~
或是您的MySQL沒有開啟對外的權限,也就是給localhost以外的ip連結!?
噢~感謝版大的迅速回應!! 剛才我確認了一下, 模擬器有連上網了MySQL對外的權限也有開~
請問您的MySql.Data.CF.dll版本多少的!? 6.x或5.x!? 謝謝^^!
感謝您~ 我試的MySql.Data.CF.dll版本是5.1 我也有試過5.0的版本 但依然不能用~~~
這個呀= = 我也不知道怎麼解決了>"< 抱歉@@"
您好~我剛才從新建立一個專案,從新設定參考MySql.Data.CF.dll 現在的問題是Reading from the stream has failed. 感謝您
這是什麼!? 我沒有遇見過XDDD 有更詳細的情況嗎!?
這是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的試試看行不行 >"< 只有多試了! 因為我也沒有遇過這些情況!! 抱歉,不能百分之百的回答到您的問題!
哈哈~我現在已經陷入困境了 我確定模擬器已經連上網路,但依然會出現下面這些例外 用5.1版的錯誤也是Reading from the stream has failed 用5.2版的錯誤是MissingManifestResourceException 沒關係~還是感謝您的幫忙 謝謝~
嗚嗚嗚~~~~~~! 不能幫到您,真的很不好意思>"<
大大: 我有一些問題,我現在我照著你上面的方式使用,也是遇到BUG,我不管用哪一版的都是會有MissingManifestResourceException的問題!!在connection.open()的地方就是會error,所以想請問一下大大現在是否已經有解決方法了!!
看看您的database有沒有開權限可以連! 確定自己的PDA有連上網路! 程式裡連database的ip等相關資訊正不正確,若還是不行,可能還要試試其它方式去找出原因了......>"< 不好意思,好像沒有解決到您的問題,因為您的描述我也不太了解詳細的環境......Sorry...!
請問一下 我顯示是以dataGridView來顯示 但我想修改,資料庫的資料可以嗎?? 而且修改的地方不定 不是各確定目標 請大大是否能幫我一下
不好意思,dataGridView我真的沒有動過,所以有沒辦法告訴您,相關的資訊! 但您可以去找找看有沒有相關dataGridView相關的使用或操作方法!
謝謝大大詳細教學 馬上練習去~
^___^
請問大大如果伺服端改用SQL SEVER 2008 那要怎麼改? 還有伺服端 是不是要寫一個接收資料的程式 但是我到現在還是不太懂 可以麻煩您告訴我該怎麼做嗎 感謝
照理說,伺服器應該是不用設定,除非SQL Server 2008有特別要設定的,您還是去微軟找找資料吧! 提供您這些建議希望會有用!!
您好,我看課本用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 看看可不可以解決您的問題.
你好,謝謝你回應我! 我剛剛努力再測了一下,, 把using MySql.Data.MySqlClient; 重新再打一次,, 下面的測試連結也重打了,, 結果就對了^^ 不知道是不是大小寫的問題呢,,害我卡超久! 不過也謝謝你!
哇! 我還以為要用5.1.x 的Connector才可以,那也謝謝您的回覆! 讓我學到新版本也是可以使用的^^!
呵呵!我當初也以為不行,不過經過測試是可以的! 晚點要來測試GridView,,抓資料,, 希望會成功摟,,^_^
希望您一切順利^^!
請問一下 可以封裝成cab檔給pda安裝嗎 我封裝都會顯示 "Windows CE 封包精靈發生錯誤。請參閱輸出視窗中的詳細資訊。" 是哪出了問題呢 vs2008 Connector/Net 6.3.5
不好意思,這個我也沒試過耶! 所以也沒辦法回答您!
請問一下! 我找不到MySql.Data.Tests.CF.dll 檔案有,但是在VS2008專案選加入參考,但是看不到那個dll
請問大大有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:
謝謝你的範例! 我成功了:) 很感謝你