準備使用MySQL與ASP.NET開發Web應用

來源:互聯網
上載者:User
asp.net|mysql|web 最近準備用Mysql+.net作開發,看了三篇文章:

     1)MySQL與ASP.NET配合更強大;

     2)選擇MySQL還是SQL Server;

     3)MySQL和.Net2.0配合使用。

MySQL與ASP.NET配合更強大

由於富有競爭力的價格和便於使用,MySQL在市場佔有率方面逐步提升。開放原始碼社區為了擴充MySQL的使用範圍,開發出了.Net架構(.NET Framework)中可以使用的資料庫連接器。我們就來學習一下如何在.Net應用程式中使用MySQL。


  MySQL漸漸的成為了在選擇資料庫平台時一個切實可行的資料庫方案。能夠證明這一點的就是許多公司都選擇mySQL作為他們的資料庫平台,例如 Google、美聯社(The Associated Press) 以及美國國家航空宇航局( NASA)。雖然對於一個開放原始碼來說,低廉的價格常常被當作主要優點來說服客戶,但是對於象Google那樣的大規模的組織來說,他們不會放心的把非常有用的資訊存放在一個只有價格優勢的資料庫產品中。MySQL真正的實力遠遠的超過了他的價格優勢,他提供了豐富的來自開放原始碼社區和商業化的附加工具。


  和.NET的資料整合

  MySQL 社區已經開發出了MySQL的資料介面,他提供了串連資料來源和程式碼的準系統。在Windows平台上,有如下的MySQL連接器:

  * MySQL Connector/Net 1.0 (之前被稱為ByteFX.Data):是一個為MySQL設計的開放原始碼.NET資料介面。它是完全用C#來開發的,我們可以在在 MySQL.com網站上找到它。(注意:在本文的例子中,我們都會使用MySQL Connector/Net 1.0這個資料介面來串連資料庫,利用Windows安裝程式即可輕易安裝它,它的代碼執行個體和文檔也包含其中。)

  * MySQLDirect .NET Data Provider: 是一個由 Core Lab 開發的商業資料介面。他的價格由購買的許可證的類型決定,但是我們可以下載它的試用版。

  如果你使用 Mono,那麼在 Mono網站上可以找到PHP連接器的下載。如果你在Windows平台上運行Mono的話,你下載的連接器包含了安裝程式。如果不是的話,那就要根據你的作業系統的種類去下載合適的連接器了。

  使用MySQL資料介面

  安裝好MySQL的資料介面後,你必須在你的代碼中引入它才能使用。你可以使用 MySql.Data.MySqlClient這個名空間來串連 MySQL 伺服器。在C#中,可以使用using語句來引入MySQL資料介面:

  using MySql.Data.MySqlClient;

  另外,你也可以在一個ASP.NET的網頁表單(Web Form)中通過使用匯入(Import)指令來引入MySQL資料介面:

  或者,你也可以在你的代碼裡在使用這個名空間時,寫全一個類的完整路徑,但是這樣的話會比使用Import指令來匯入輸入更多的字元,浪費更多的位元組。指定了名空間後,我們就可以和MySQL資料庫進行資料互動了。 MySql.Data.MySqlClient這個名空間提供了許多用於處理MySQL資料的類。下面是這些類的一個樣本:

  * MySqlConnection: 管理和 MySQL 伺服器/資料庫的串連;

  * MySqlDataAdapter: 一套用於填充DataSet對象和更新MySQL資料庫的命令和串連的集合;

  * MySqlDataReader: 讓你能夠從一個 MySQL 資料庫讀取資料。它是一個單向的資料流;

  * MySqlCommand: 提供向資料庫伺服器發送指令的功能;

  * MySqlException: 當發生問題時提供例外處理。

  我們會使用其中的一些類去和我們的範例資料庫進行資料互動。

  串連 MySQL 資料庫

  使用MySQL資料庫的第一步是要通過MySQLConnection類和資料庫建立串連。通過一個串連字串,MySqlConnection 將會被執行個體化成一個樣本。連接字串將告訴代碼到哪裡去找MySQL伺服器以及其他一些選項。

  一個串連字串告訴代碼使用指定的使用者名稱和密碼去串連一個名為MySQLTestServer的MySQL伺服器,並進入techrepublic資料庫。我在我的測試機上設定了允許匿名登陸(這樣的設定有非常大的安全性漏洞,所以不建議你在生產伺服器上也這麼做),所以在範例中將會使用如下的串連字串:

  "server=localhost; database=sitepoint;"
 指定了串連字串後, MySqlConnection 對象的Open方法就被調用並開啟串連。串連建立後,你就可以給MySQL資料庫發送命令或從資料庫獲得資料了。

  ASP.NET和MySQL的組合

  讓我們更深入的討論一下結合MySqlConnection類和其他的類來產生一個MySQL伺服器上的資料庫列表。表 B列出了一個使用C#寫的ASP.NET的網頁表單。它建立了一個串連,接著給伺服器下了一個指令(SHOW DATABASES),然後通過MySqlReader對象把結果顯示出來。

  用 MySqlCommand 對象向MySQL伺服器發送 SHOW DATABASES 命令和直接在 MySQL 管理工具中輸入這個命令得結果是一樣的。唯一的區別是,我們在代碼中必須使用另一個對象來擷取結果集。MySqlDataReader 對象在擷取結果時被執行個體化(通過 MySqlCommand 類的 ExecuteReader 方法)。MySqlDataReader 對象的 GetString 方法被用於通過ASP.NET的標籤控制來顯示結果集中的資料。GetString 方法的指標0指定了顯示結果集的當前行(在while迴圈中)的第一列資料。

  Mono提示
 如果你使用開放原始碼的Mono開發平台,例子中的代碼只需要做小小的改動就能正常的運行。MySQL的資料介面在 ByteFX.Data.MySqlClient 這個空間名裡,而不是Windows上的MySql.Data.MySqlClient空間名。事實上 MySQL 的資料介面原來是由 ByteFX公司開發的,但是後被MySQL公司收購。所以如果你使用Mono的話,你必須這樣聲明空間名:

  using ByteFX.Data.MySqlClient;

  結語

  MySQL 和 .NET 的組合提供了一個強大的開發平台。MySQL在開源社區得到了強大的支援人員,.NET也通過 Mono 而被開放原始碼社區所接受。這樣的組合提供了一個在Windows,及其他語言如UNIX或Linux,環境下高度靈活的開發平台。


Mono ByteFX.Data 與 encoding
ByteFX.Data 是 MySQL 的 .Net Data Provider, 同時提供有 mono 與 Microsoft.Net 的版本(微軟版本好像叫做 Connector/.Net).
這兩天在試著用 mono 與 ByteFX.Data 來存取 MySQL 資料庫.
但卻發現中文的字串在存入資料庫之後,全部都變成問號了.
原本以為是我編碼的處置或設定有問題,在經過 Trace mono 與 ByteFX.Data 的 source code 之後,才發現並不是.
我開始懷疑是 MySQL 的問題,我首先去問 Google 大神.
Google 大神告訴我,MySQL 在 4.0 以前並不支援 unicode, 資料庫預設的編碼是 latin1.
ok, 那麼為什麼使用 MediaWiki 或是一些 blog 卻可以存入 unicode 的字串??
又稍稍的 Trace 了 MediaWiki 的 source code, 並無驚人之處,也沒有什麼特別的處理,純粹就是 insert, update 而已.

最後我再回頭看 ByteFX.Data 的 source code, 終於找到問題所在.
ByteFX.Data 在丟封包到 MySQL 之前,會先依據 MySQL 的 encoding 進行編碼.
所以不管怎麼樣,我在 client 怎麼轉碼,到最後 ByteFX.Data 都會轉成 latin1,再進行存入.是故,可能的解法如下:
1. 升級 MySQL 到 4.0 以後的版本.
2. 在丟資料庫之前,先把字串轉為 byte[], 如果是 byte[], ByteFX.Data 就不會進行轉碼,而直接存入. 但這樣在取出資料的時候,還需要再作一次工,將 byte[] 轉回 string.
解法 2 相當費事,而且以後如果要更換資料庫的時候,又會再受到一次衝擊.
看來解法 1 才是王道. 但是,懶得升級說... =_=
http://cgi.blog.yam.com/trackback/566961

原文:http://www.keyusoft.cn/Contentview.aspx?year=2005&month=$10&day=$19&postid=128

選擇MySQL還是SQL Server

對於程式開發人員而言,目前使用最流行的兩種後台資料庫即為MySQL and SQL Server。這兩者最基本的相似之處在於資料存放區和屬於查詢系統。你可以使用SQL來訪問這兩種資料庫的資料,因為它們都支援ANSI-SQL。還有,這兩種資料庫系統都支援二進位關鍵詞和關鍵索引,這就大大地加快了查詢速度。同時,二者也都提供支援XML的各種格式。

除了在顯而易見的軟體價格上的區別之外,這兩個產品還有什麼明顯的區別嗎?在這二者之間你是如何選擇的?讓我們看看這兩個產品的主要的不同之處,包括髮行費用,效能以及它們的安全性。

根本的區別是它們遵循的基本原則
二者所遵循的基本原則是它們的主要區別:開放vs保守。SQL伺服器的狹隘的,保守的儲存引擎與MySQL伺服器的可擴充,開放的儲存引擎絕然不同。雖然你可以使用SQL伺服器的Sybase引擎,但MySQL能夠提供更多種的選擇,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支援陌生的關鍵詞,所以它比SQL伺服器要少一些相關的資料庫。同時,MySQL也缺乏一些儲存程式的功能,比如MyISAM引擎聯支援交換功能。

發行費用:MySQL不全是免費,但很便宜
當提及發行的費用,這兩個產品採用兩種絕然不同的決策。對於SQL伺服器,擷取一個免費的開發費用最常的方式是購買微軟的Office或者Visual Studio的費用。但是,如果你想用於商業產品的開發,你必須還要購買SQL Server Standard Edition。學校或非贏利的企業可以不考慮這一附加的費用。

效能:先進的MySQL   
純粹就效能而言,MySQL是相當出色的,因為它包含一個預設案頭格式MyISAM。MyISAM 資料庫與磁碟非常地相容而不佔用過多的CPU和記憶體。MySQL可以運行於Windows系統而不會發生衝突,在UNIX或類似UNIX系統上運行則更好。你還可以通過使用64位處理器來擷取額外的一些效能。因為MySQL在內部裡很多時候都使用64位的整數處理。Yahoo!商業網站就使用MySQL作為後台資料庫。

當提及軟體的效能,SQL伺服器的穩定性要比它的競爭者強很多。但是,這些特性也要付出代價的。比如,必須增加額外複雜操作,磁碟儲存,記憶體損耗等等。如果你的硬體和軟體不能充分支援SQL伺服器,我建議你最好選擇其他如DBMS資料庫,因為這樣你會得到更好的結果。

這兩者資料庫都能夠在.NET或J2EE下運行正常,同樣,都能夠利用RAID。

安全功能
 

MySQL有一個用於改變資料的二進位日誌。因為它是二進位,這一日誌能夠快速地從主機上複製資料到客戶機上。即使伺服器崩潰,這一二進位日誌也會保持完整,而且複製的部分也不會受到損壞。

在SQL伺服器中,你也可以記錄SQL的有關查詢,但這需要付出很高的代價。

安全性
這兩個產品都有自己完整的安全機制。只要你遵循這些安全機制,一般程式都不會出現什麼問題。這兩者都使用預設的IP連接埠,但是有時候很不幸,這些IP也會被一些駭客闖入。當然,你也可以自己設定這些IP連接埠。

恢複性:先進的SQL伺服器
恢複性也是MySQL的一個特點,這主要表現在MyISAM配置中。這種方式有它固有的缺欠,如果你不慎損壞資料庫,結果可能會導致所有的資料丟失。然而,對於SQL伺服器而言就表現得很穩鍵。SQL伺服器能夠時刻監測資料交換點並能夠把資料庫損壞的過程儲存下來。

根據需要決定你的選擇
對於這兩種資料庫,如果非要讓我說出到底哪一種更加出色,也許我會讓你失望。以我的觀點,任一對你的工作有協助的資料庫都是很好的資料庫,沒有哪一個資料庫是絕對的出色,也沒有哪一個資料庫是絕對的差勁。我想要告訴你的是你應該多從你自己的需要出發,即你要完成什麼樣的任務?而不要單純地從軟體的功能出發。

如果你想建立一個.NET伺服器體系,這一體系可以從多個不同平台訪問資料,參與資料庫的管理,那麼你可以選用SQL伺服器。如果你想建立一個第三方網站,這一網站可以從一些用戶端讀取資料,那麼MySQL將是最好的選擇。

原文:http://htm.winsteps.net/database/331.htm

MySQL和.Net2.0配合使用

MySql現在的最新版本是5.x.第一次接觸它是在大二的時候,用php,那時好像還是4.x版本。

Mysql5增加很多新的功能,開始支援:預存程序、觸發器、視圖、資訊架構視圖等...

MySql在安裝時一如既往的比較複雜,往往就是一個失敗的提示,沒有什麼其它提示原因。


這是一篇文章,比較MySql和SqlServer的,http://htm.winsteps.net/database/331.htm

MySql中文網站http://www.mysql.cn/上資料很少,大多是些安裝協助。
要查資料還是去MySql的網站http://www.mysql.com/。

MySql現在有提供的各種串連工具(http://dev.mysql.com/downloads/connector/),.net下可以用的有Connector/ODBC和Connector/Net。

ODBC串連效率可能稍低,最好還是用Net直接的串連
這篇文章介紹了各種串連方法http://www.mysql.com/news-and-events/press-release/release_2002_10.html

1:ODBC串連
      現在的版本是3.51,安裝之後,可以這樣操作:
               // string conStr = "DRIVER = {MySQL ODBC 3.51 Driver}; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

             //string conStr = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=root;PASSWORD=;OPTION=3;";
            string conStr = "provider = MySQL ODBC 3.51 Driver; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

            try
            {
                OleDbConnection  connection = new OleDbConnection(conStr);
               connection.Open();
            }
            catch(Exception ex)
            {
              MessageBox.Show(ex.Message);
            }
2:Net串連:
     MySQL Connector Net 1.0.7:有net1.0;net.1;net2.0;mono1.0四個版本的connector。免費
     CoreLab.MySql 3.5:這是個商業的版本,試用期30天。

    下邊的代碼是使用MySQL Connector Net 的例子。注意:他的Parameter的首碼是“?”而不是“@”。這個問題比較特殊。CoreLab裡面的Parameter的首碼就是“@”.
      string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false;port=3308", "localhost", "root", "", "test");
            try
            {
                MySqlConnection myConn = new MySqlConnection(connStr);
                myConn.Open();
                MySqlCommand cmd = myConn.CreateCommand();
               
                cmd.Parameters.Add("?DocName", MySqlDbType.VarChar, 50);
                cmd.Parameters[0].Value = "test by code";
                cmd.Parameters[0].SourceColumn = "DocName";
                cmd.CommandText = "update t_docs set DocName=?DocName where DocId=4";
                cmd.ExecuteNonQuery();
這是使用一個ORM時設定provider的例子
CustomProvider mysqlProvider = new CustomProvider("MySql.Data", "MySql.Data.MySqlClient.MySqlConnection", "MySql.Data.MySqlClient.MySqlDataAdapter");
                        mysqlProvider.StartDelimiter = "";//default is "/""
                        mysqlProvider.EndDelimiter = "";//default is "/""
                        mysqlProvider.ParameterPrefix = "?";//設定參數首碼
                        mysqlProvider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";//設定分頁演算法
                        mysqlProvider.IdentityQuery = "SELECT LAST_INSERT_ID()";//設定擷取剛剛插入記錄Id的函數

3:OLE串連:
      現在還沒有來自官方的支援。

在vs2005中,直接引用for .net2.0版本的dll即可。至於那個商業版,就得費些功夫了,需要一個許可檔案(拖動一個Conection組件到Form上就能自動建立該許可)

附,連接字串可以到這裡查詢http://www.connectionstrings.com/, 夠全的了。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.