ALinq 讓Mysql變得如此簡單2011-03-28 18:14 by 賀臣, 3896 閱讀, 21 評論, 收藏, 編輯當大家已經(jīng)習慣了使用.net 去操作SQL Server,,有多少人曾經(jīng)嘗試過使用.net 去操作Mysql數(shù)據(jù)庫,!在.net 的光環(huán)下,,Mysql是顯得如此微不足道!但是Mysql的開源又是如此具有誘惑,。 1. ADO.NET 方式連接Mysql數(shù)據(jù)庫 經(jīng)過在網(wǎng)上查找資料,,在.net 上連接mysql 數(shù)據(jù)庫有三種方式: 方法一: 使用CoreLab推出的MYSQL訪問組件,引用命名空間CoreLab.MySql 方法二: 方法三: 以上三種方式的說明可以具體參照文章: 此篇文章對此做了詳細說明
這里要說明的是第三種方式,這種訪問方式完全遵循我們Ado.net 訪問SQL Server的模式,,所以使用起來也更加得心應手,。 ADO.NET driver for MySQL 下載地址: 官方網(wǎng)站: http://www./downloads/
2. 基礎(chǔ)數(shù)據(jù)庫操作 使用ADO.net 操作數(shù)據(jù)庫,固定不變的模式,,五個核心對象 Connection: Connection 對象主要是開啟程序和數(shù)據(jù)庫之間的連結(jié),。沒有利用連結(jié)對象將數(shù)據(jù)庫打開,是無法從數(shù)據(jù)庫中取得數(shù)據(jù)的,。 Command:Command 對象主要可以用來對數(shù)據(jù)庫發(fā)出一些指令,例如可以對數(shù)據(jù)庫下達查詢,、新增,、修改、刪除數(shù)據(jù)等指令,,以及呼叫存在數(shù)據(jù)庫中的預存程序等,。 DataAdapter: DataSetCommand 對象主要是在數(shù)據(jù)源以及DataSet 之間執(zhí)行數(shù)據(jù)傳輸?shù)墓ぷ鳎梢酝高^Command 對象下達命令后,,并將取得的數(shù)據(jù)放入DataSet 對象中,。 DataSet:DataSet 這個對象可以視為一個暫存區(qū)(Cache),可以把從數(shù)據(jù)庫中所查詢到的數(shù)據(jù)保留起來,,甚至可以將整個數(shù)據(jù)庫顯示出來,。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataSetCommand 對象取得一些例如主鍵等的數(shù)據(jù)表結(jié)構(gòu),,并可以記錄數(shù)據(jù)表間的關(guān)聯(lián),。DataSet 對象可以說是ADO.NET 中重量級的對象,這個對象架構(gòu)在DataSetCommand 對象上,,本身不具備和數(shù)據(jù)源溝通的能力,。 DataReader: 當我們只需要循序的讀取數(shù)據(jù)而不需要其它操作時,可以使用DataReader 對象,。DataReader對象只是一次一筆向下循序的讀取數(shù)據(jù)源中的數(shù)據(jù),,而且這些數(shù)據(jù)是只讀的,并不允許作其它的操作,。因為DataReader 在讀取數(shù)據(jù)的時候限制了每次只讀取一筆,,而且只能只讀,,所以使用起來不但節(jié)省資源而且效率很好. using System; using System.Collections.Generic; using System.Linq; using System.Text; using MySql.Data.MySqlClient; namespace CimDataImport { public class TestCharacter { public const string mysqlConnection = "User Id=root;Host=localhost;Database=cim;password=root"; /// <summary> /// 添加數(shù)據(jù) /// </summary> /// <returns></returns> public int Add(UserBase entity) { string sql = "INSERT INTO cimuser (userid,userNickName) VALUE (@userid,@userNickName)"; using (MySqlConnection mycn = new MySqlConnection(mysqlConnection)) { mycn.Open(); MySqlCommand command = new MySqlCommand(sql, mycn); command.Parameters.AddWithValue("@userid", entity.UserId); command.Parameters.AddWithValue("@userNickName",entity.UserNickName); return command.ExecuteNonQuery(); } } /// <summary> /// 修改數(shù)據(jù) /// </summary> /// <param name="entity"></param> /// <returns></returns> public int Update(UserBase entity) { string sql = "UPDATE cimuser SET userNickName=@userNickName WHERE userid=@userid"; using (MySqlConnection mycn = new MySqlConnection(mysqlConnection)) { mycn.Open(); MySqlCommand command = new MySqlCommand(sql, mycn); command.Parameters.AddWithValue("@userid", entity.UserId); command.Parameters.AddWithValue("@userNickName", entity.UserNickName); return command.ExecuteNonQuery(); } } /// <summary> /// 刪除數(shù)據(jù) /// </summary> /// <param name="primaryKey"></param> /// <returns></returns> public int Delete(int primaryKey) { string sql = "DELETE FROM cimuser WHERE userid=@userid"; using (MySqlConnection mycn = new MySqlConnection(mysqlConnection)) { mycn.Open(); MySqlCommand command = new MySqlCommand(sql, mycn); command.Parameters.AddWithValue("@userid", primaryKey); return command.ExecuteNonQuery(); } } /// <summary> /// 根據(jù)主鍵查詢 /// </summary> /// <param name="primaryKey"></param> /// <returns></returns> public UserBase Get(int primaryKey) { string sql = "SELECT userid,userNickName FROM cimuser where userid=@userid"; using (MySqlConnection mycn = new MySqlConnection(mysqlConnection)) { mycn.Open(); MySqlCommand command = new MySqlCommand(sql, mycn); command.Parameters.AddWithValue("@userid", primaryKey); MySqlDataReader reader = command.ExecuteReader(); UserBase userBase = null; if (reader.Read()) { userBase = new UserBase(); userBase.UserId = Convert.ToInt32(reader["userid"]); userBase.UserNickName = reader["userNickName"] == DBNull.Value ? null : reader["userNickName"].ToString(); } return userBase; } } /// <summary> /// 查詢集合 /// </summary> /// <returns></returns> public IList<UserBase> GetList() { string sql = "SELECT userid,userNickName FROM cimuser limit 1,10"; using (MySqlConnection mycn = new MySqlConnection(mysqlConnection)) { mycn.Open(); MySqlCommand command = new MySqlCommand(sql, mycn); MySqlDataReader reader = command.ExecuteReader(); IList<UserBase> list = new List<UserBase>(); UserBase userBase = null; while (reader.Read()) { userBase = new UserBase(); userBase.UserId = Convert.ToInt32(reader["userid"]); userBase.UserNickName = reader["userNickName"] == DBNull.Value ? null : reader["userNickName"].ToString(); list.Add(userBase); } return list; } } } } 3. ALinq 讓我變得如此簡單 在Linq 沒有現(xiàn)世之前,Ado.net 的數(shù)據(jù)庫操作讓我們感覺到編程的痛苦,,每天重復著相同的數(shù)據(jù)庫操作代碼,,后來千奇百怪的代碼生成器讓我們從中解脫出來,雖然有些代碼生成器的確非常不錯,,但是心中始終覺得那些代碼少了一些什么,! Linq TO SQL 推出之后,我們感覺到了.net 語法的甜,,是甜到心里的那種甜,,感覺自己從代碼中徹底釋放出來!可是Linq To SQL 只支持微軟的 SQL Server 數(shù)據(jù)庫,。
第一: 新建工程 這里使用控制臺程序
第三: 新建數(shù)據(jù)庫連接
第四:添加Mysql數(shù)據(jù)庫連接
第五:選擇Mysql 數(shù)據(jù)源
第六:更改數(shù)據(jù)源
第七:輸入Mysql服務名以及賬號和密碼
第八:測試連接
第九:連接成功
上述操作是必須在安裝ADO.NET driver for MySQL 組件的情況下才能正常操作,否則第六步選擇更改數(shù)據(jù)源的時候看不到MySql database 選項,。 Linq to sql 對于大家來說已經(jīng)很熟悉了,,ALinq 的操作前面的文章也已經(jīng)詳細講解過了。這里操作不做詳細說明了,!
4. 中文你讓我如何說你 Mysql 數(shù)據(jù)庫開源,,更重要的是它能夠運行在Linux系統(tǒng)中!在工作中將Sql server 數(shù)據(jù)庫中的數(shù)據(jù)導入到Mysql 的時候,,意想不到的事情發(fā)生了,,中文在Mysql 中都變成了亂碼。而且Mysql 是安裝在Linux 系統(tǒng)上的,。
Linux 中Mysql解決亂碼問題方案以及操作步驟: 1. 查找Mysql 下的.cnf 配置文件 在windows系統(tǒng)中安裝mysql程序,,其中保存保存數(shù)據(jù)的配置文件名為 my.ini 此文件存在于mysql安裝目錄下,使用記事本打開此文件修改內(nèi)容如下: 將 default-character-set=utf8 (有兩處)更改為 default-character-set=GBK 并且添加節(jié)點:character_set=gbk
在Linux中首先查找mysql 的配置文件命令如下: find -name *.cnf –print
2. 將Mysql 中的一個cnf文件復制到etc文件目錄下,并且保存為my.cnf 在etc 目錄下查找my.cnf 文件,,如果此文件不存在則需要從1中查找的文件中my-large.cnf, My-small.cnf,my-medium.cnf 三個文件中復制一個到etc目錄下面,,并且保存my.cnf 文件。 使用命令: cp /usr/share/mysql/my-large.cnf /etc/ mv etc/my-large.cnf etc/my.cnf
3. 修改my.cnf 配置文件 cd etc/ 進入etc目錄下 vi my.cnf 使用vi命令打開my.cnf 文件
如果文件中存在此節(jié)點,則將編碼方式修改為gbk 4. 重新啟動服務 /etc/init.d/mysql restart 重新啟動mysql 服務 5. 再次導入數(shù)據(jù)成功 |
|