在.NET中要訪問MySql,我採用的是MySql官方提供的.NET connector,此驅動只需要下載即可使用:http://dev.mysql.com/downloads/connector/net/1.0.html
在使用中積累了幾點經驗:
1)使用Parameter參數形式提交Command時必須要把"@"號換成"?"號,這一點讓我困惑了一天,只是不明白MySQL為何要搞特殊呢,象MS、ODP.NET for Oracle、OleDb等方式,都是用"@"號的。
例子如下:
string connstr=Setting.Instance().GetConnectionString("MySql");
MySqlConnection conn =new MySqlConnection(connstr);
conn.Open();
string query = "insert into myfirst(Id,Name) values(?Id,?Name)";
MySqlCommand cmd = new MySqlCommand(query, conn);
MySqlParameter para1=new MySqlParameter("?Id",DbType.Int32); //這裡要注意必須要用?號
MySqlParameter para2=new MySqlParameter("?Name",DbType.String);//這裡要注意必須要用?號
para1.Value=5;
para2.Value="ddd";
cmd.Parameters.Add(para1);
cmd.Parameters.Add(para2);
cmd.ExecuteNonQuery();
2)在MySQL中也有保留字,為了提供相容,我必須要找到定界符,好不容易在MySql的論壇裡找到了,使用的定界符是`,這個符號不是單引號,而是鍵盤上數字1前面的那個“點”,真是害死我啊。
3)MySQL中的TOP功能倒是非常簡單,只需要語句後面使用“limit n”就行了,這比ORACLE的那Rownum方便多了。
使用MySql 的.NET Connector訪問MySQL總體來說還算不錯的,大部分是相容.NET中的IConnection、ICommand的。
PS:有個不明白就是在.NET Connector中提供一個MySqlDateTime類,不知道這個類具體有什麼用,怎麼用,在國內沒有找到相關的資料。MySqlDateTime跟System.Date還不相容,在MySQL論壇上相關文章N多。
如果採用String類型的Parameter傳遞給MySql的DateTime欄位會報:Unable to Convert MySql Date/Time value to System.DateTime 的錯誤。
所有相關的MySQL的問題可以去:http://forum.mysql.com/ 論壇看看:)
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/, 夠全的了。