ALinq 让Mysql变得如此简单

当大家已经习惯了使用.net 去操作SQL Server,有多少人曾经尝试过使用.net 去操作Mysql数据库!在.net 的光环下,Mysql是显得如此微不足道!但是Mysql的开源又是如此具有诱惑。

1.       ADO.NET 方式连接 Mysql数据库  

经过在网上查找资料,在 .net 上连接 mysql 数据库有三种方式:  

        方法一:

     使用 CoreLab推出的 MYSQL访问组件,引用命名空间 CoreLab.MySql

方法二:
      通过 ODBC访问 MYSQL数据库 , 前要先下载两个组件: odbc.net MYSQL ODBC驱动 ,可以使用 ODBC访问 Mysql数据库  

方法三:
    使用 MYSQL推出的 MySQL Connector/Net is an ADO.NET driver for MySQL ,该组件为 MYSQL ADO.NET访问 MYSQL数据库设计的 .NET访问组件,使 MySql.Data.MySqlClient 

以上三种方式的说明可以具体参照文章:

 http://blog.****.net/lxh0959/archive/2008/08/05/2773424.aspx

       此篇文章对此做了详细说明  

 

 

这里要说明的是第三种方式,这种访问方式完全遵循我们 Ado.net 访问 SQL Server的模式,所以使用起来也更加得心应手。

           ADO.NET driver for MySQL 下载地址:

                   官方网站: http://www.mysql.com/downloads/  

 

2.       基础数据库操作  

使用 ADO.net 操作数据库,固定不变的模式,五个核心对象

   Connection: Connection 对象主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。

   Command Command 对象主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。

   DataAdapter: DataSetCommand 对象主要是在数据源以及 DataSet 之间执行数据传输的工作,它可以透过 Command 对象下达命令后,并将取得的数据放入 DataSet 对象中。

   DataSet DataSet 这个对象可以视为一个暂存区( Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。 DataSet 的能力不只是可以储存多个 Table 而已,还可以透过 DataSetCommand 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。 DataSet 对象可以说是 ADO.NET   中重量级的对象,这个对象架构在 DataSetCommand 对象上,本身不具备和数据源沟通的能力。

  DataReader: 当我们只需要循序的读取数据而不需要其它操作时,可以使用 DataReader 对象。 DataReader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为 DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好

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>
        
///  添加数据
        
///   </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>
        
///  修改数据
        
///   </summary>
        
///   <param name="entity"></param>
        
///   <returns></returns>
         public   int  Update(UserBase entity)
        {
            
string  sql  =   " UPDATE cimuser SET [email protected] WHERE [email protected] " ;
            
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>
        
///  删除数据
        
///   </summary>
        
///   <param name="primaryKey"></param>
        
///   <returns></returns>
         public   int  Delete( int  primaryKey)
        {
            
string  sql  =   " DELETE FROM cimuser WHERE [email protected] " ;
            
using  (MySqlConnection mycn  =   new  MySqlConnection(mysqlConnection))
            {
                mycn.Open();
                MySqlCommand command 
=   new  MySqlCommand(sql, mycn);
                command.Parameters.AddWithValue(
" @userid " , primaryKey);
                
return  command.ExecuteNonQuery();
            }
        }

        
///   <summary>
        
///  根据主键查询
        
///   </summary>
        
///   <param name="primaryKey"></param>
        
///   <returns></returns>
         public  UserBase Get( int  primaryKey)
        {
            
string  sql  =   " SELECT userid,userNickName FROM cimuser where [email protected] " ;
            
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 没有现世之前, Ado.net 的数据库操作让我们感觉到编程的痛苦,每天重复着相同的数据库操作代码,后来千奇百怪的代码生成器让我们从中解脱出来,虽然有些代码生成器的确非常不错,但是心中始终觉得那些代码少了一些什么!

Linq TO SQL 推出之后,我们感觉到了 .net 语法的甜,是甜到心里的那种甜,感觉自己从代码中彻底释放出来!可是 Linq To SQL 只支持微软的 SQL Server 数据库。

Alinq 是如此完美的解决了多类型数据库操作的问题,在操作 SQL Server 数据上毫不逊色 Linq to SQL,在 Mysql Oracle,Db2 等数据库操作上更甚一筹!

 

 

第一: 新建工程

                    这里使用控制台程序

      第二:添加新建项

 

 

ALinq 让Mysql变得如此简单  

第三: 新建数据库连接  

ALinq 让Mysql变得如此简单  

 第四:添加 Mysql 数据库连接

ALinq 让Mysql变得如此简单  

 第五:选择 Mysql 数据源

ALinq 让Mysql变得如此简单  

第六:更改数据源  

ALinq 让Mysql变得如此简单  

第七:输入 Mysql 服务名以及账号和密码  

ALinq 让Mysql变得如此简单  

 第八:测试连接

ALinq 让Mysql变得如此简单  

第九:连接成功  

ALinq 让Mysql变得如此简单  

上述操作是必须在安装 ADO.NET driver for MySQL 组件的情况下才能正常操作,否则第六步选择更改数据源的时候看不到 MySql database 选项。

    Linq to sql 对于大家来说已经很熟悉了, ALinq 的操作前面的文章也已经详细讲解过了。这里操作不做详细说明了!  

 

4.   中文你让我如何说你  

 Mysql 数据库开源,更重要的是它能够运行在 Linux系统中!在工作中将 Sql server 数据库中的数据导入到 Mysql 的时候,意想不到的事情发生了,中文在 Mysql 中都变成了乱码。而且 Mysql 是安装在 Linux 系统上的。

 

Linux Mysql解决乱码问题方案以及操作步骤:

1.       查找 Mysql 下的 .cnf 配置文件  

               windows系统中安装 mysql程序,其中保存保存数据的配置文件名为 my.ini

   此文件存在于 mysql安装目录下 ,使用记事本打开此文件修改内容如下:

   将 default-character-set=utf8 (有两处 )更改为 default-character-set=GBK 并且添加节点: character_set=gbk 

ALinq 让Mysql变得如此简单  

Linux中首先查找 mysql 的配置文件命令如下:

find -name *.cnf –print

    得到如下结果:  

 

ALinq 让Mysql变得如此简单  

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 文件  

ALinq 让Mysql变得如此简单  

如果文件中存在此节点,则将编码方式修改为 gbk  

4. 重新启动服务

/etc/init.d/mysql restart  重新启动 mysql 服务  

5.  再次导入数据成功