ALinq 让Mysql变得如此简单

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 当大家已经习惯了使用.net 去操作SQL Server,有多少人曾经尝试过使用.net 去操作Mysql数据库!在.net 的光环下,Mysql是显得如此微不足道!但是Mysql的开源又是如此具有诱惑。

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

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

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

        方法一:

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

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

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

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

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

 

  

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

           ADO.NET driver for MySQL 下载地址:

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

 

2.       基础数据库操作 

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

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

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

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

   DataSetDataSet 这个对象可以视为一个暂存区(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 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>
        
///  删除数据
        
///   </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>
        
///  根据主键查询
        
///   </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 没有现世之前,Ado.net 的数据库操作让我们感觉到编程的痛苦,每天重复着相同的数据库操作代码,后来千奇百怪的代码生成器让我们从中解脱出来,虽然有些代码生成器的确非常不错,但是心中始终觉得那些代码少了一些什么!

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

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

 

第一: 新建工程

                    这里使用控制台程序

      第二:添加新建项 

 

 

第三: 新建数据库连接 

 

 第四:添加Mysql数据库连接

 

 第五:选择Mysql 数据源

 

第六:更改数据源 

 

第七:输入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 

 

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

 

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

4. 重新启动服务

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

5.  再次导入数据成功

 

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
mysql 行转列
mysql 行转列
35 0
|
4月前
|
关系型数据库 MySQL
零基础带你学习MySQL—创建表(四)
零基础带你学习MySQL—创建表(四)
|
6月前
|
存储 SQL 关系型数据库
MySQL 查询语句大全
MySQL 查询语句大全
75 2
|
10月前
|
关系型数据库 MySQL
|
10月前
|
关系型数据库 MySQL 数据库
|
10月前
|
SQL 存储 关系型数据库
|
10月前
|
SQL 关系型数据库 MySQL
MySQL_5 有丶牛逼的查询语句
MySQL 第五节 有点NB的查询语句 内容分享。
47 1
|
11月前
|
Oracle 关系型数据库 MySQL
【MySQL学习笔记】系列七:MySQL的多表查询(一)
【MySQL学习笔记】系列七:MySQL的多表查询(一)
|
11月前
|
SQL 关系型数据库 MySQL
【MySQL学习笔记】系列七:MySQL的多表查询(二)
【MySQL学习笔记】系列七:MySQL的多表查询(二)
|
SQL 安全 关系型数据库
MySQL复习资料(二)——MySQL-DDL语句
MySQL复习资料(二)——MySQL-DDL语句
80 0
MySQL复习资料(二)——MySQL-DDL语句