Dapper操作Sql Server和MySql數據庫

1.爲什麼選擇Dapper

1)輕量。

2)速度快。Dapper的速度接近與IDataReader,取列表的數據超過了DataTable。

3)支持多種數據庫。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server

4)可以映射一對一,一對多,多對多等多種關係。

5)性能高。通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象,性能不錯。

6)支持FrameWork2.0,3.0,3.5,4.0,4.5

7)Dapper語法十分簡單。並且無須遷就數據庫的設計

2.使用教程

1)在配置文件web.config中添加連接字符串

1
2
3
4
<connectionStrings>
  <add name="sqlconnectionString" connectionString="server=127.0.0.1;database=MyDataBase;User=sa;password=123456;Connect Timeout=1000000"/>
  <add name="mysqlconnectionString" connectionString="Database=hyd;Data Source=127.0.0.1;User Id=root;Password=root;CharSet=utf8;port=3306"/>
</connectionStrings>

2)獲取連接數據庫對象

  獲取Sql Server的連接數據庫對象:SqlConnection  

1
2
3
4
5
6
7
public static SqlConnection SqlConnection()
        {
            string sqlconnectionString = ConfigurationManager.ConnectionStrings["sqlconnectionString"].ToString();
            var connection = new SqlConnection(sqlconnectionString);
            connection.Open();
            return connection;
        }

 獲取MySql的連接數據庫對象:MySqlConnection  

1
2
3
4
5
6
7
public static MySqlConnection MySqlConnection()
   {
       string mysqlconnectionString = ConfigurationManager.ConnectionStrings["mysqlconnectionString"].ToString();
       var connection = new MySqlConnection(mysqlconnectionString);
       connection.Open();
       return connection;
   }

封裝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class DapperService
    {
        public static SqlConnection SqlConnection()
        {
            string sqlconnectionString = ConfigurationManager.ConnectionStrings["sqlconnectionString"].ToString();
            var connection = new SqlConnection(sqlconnectionString);
            connection.Open();
            return connection;
        }
        public static MySqlConnection MySqlConnection()
        {
            string mysqlconnectionString = ConfigurationManager.ConnectionStrings["mysqlconnectionString"].ToString();
            var connection = new MySqlConnection(mysqlconnectionString);
            connection.Open();
            return connection;
        }
    }

3)實體類

1
2
3
4
5
6
public class Users
 {
     public int ID { getset; }//自增主鍵
     public string Name { getset; }
     public int  Age { getset; }
 }

4)增刪改查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//增
    using (IDbConnection conn = DapperService.MySqlConnection())
    {
        Users user = new Users();
        user.Name = "CNKI";
        user.Age = 38;
        string sqlCommandText = @"INSERT INTO USERS(Name,Age)VALUES(@Name,@Age)";
        int result = conn.Execute(sqlCommandText, user);
    }
  //批量增
    using (IDbConnection conn = DapperService.MySqlConnection())
    {
        List<Users> list = new List<Users>();
        for (int i = 0; i < 5; i++)
        {
            Users user = new Users();
            user.Name = "CNKI";
            user.Age = 38;
            list.Add(user);
        }
        string sqlCommandText = @"INSERT INTO USERS(Name,Age)VALUES(@Name,@Age)";
        int result = conn.Execute(sqlCommandText, list);
    }
    //刪
    using (IDbConnection conn = DapperService.MySqlConnection())
    {
        Users user = new Users();
        user.ID = 1;
        string sqlCommandText = @"DELETE FROM USERS WHERE ID=@ID";
        int result = conn.Execute(sqlCommandText, user);
    }
    //改
    using (IDbConnection conn = DapperService.MySqlConnection())
    {
        Users user = new Users();
        user.ID = 2;
        user.Name = "CNKI";
        user.Age = 18;
        string sqlCommandText = @"UPDATE USERS SET Age=@Age WHERE ID=@ID";
        int result = conn.Execute(sqlCommandText, user);
    }
    //查
    using (IDbConnection conn = DapperService.MySqlConnection())
    {
        string sqlCommandText = @"SELECT * FROM USERS WHERE ID=@ID";
        Users user = conn.Query<Users>(sqlCommandText, new  { ID=2 }).FirstOrDefault();
    }
   //分頁
    using (IDbConnection conn = DapperService.MySqlConnection())
    {
        int pageIndex = 0;
        int pageSize = 2;
        string sqlCommandText = string.Format(@"SELECT * FROM USERS  LIMIT {0},{1} ", pageIndex * pageSize, pageSize);
        List<Users> user = conn.Query<Users>(sqlCommandText).ToList();
    }

3.防止Sql注入

1
2
3
4
5
6
7
using (IDbConnection conn = DapperService.MySqlConnection())
 {
     string sqlCommandText = @"SELECT * FROM USER WHERE ID=@ID";
     var p = new DynamicParameters();
     p.Add("@ID", 1);
     User user2 = conn.Query<User>(sqlCommandText,p).FirstOrDefault();
 }

這要用到了Dapper的DynamicParameters動態參數集合類,從上面可以看到可以能過Add方法加入參數。最後通過conn.Query<MSys_Admin>(sqlText, p)執行sql,,返回結果。因爲用的是命令參數的形式,讓sql注入無機可乘,所以這種方案是安全的。

4.操作事物

複製代碼
 1 [TestMethod]
 2  public void TestDapperTransaction()
 3  {
 4      using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))
 5      {
 6          conn.Open();
 7          IDbTransaction trans = conn.BeginTransaction();
 8          int row = conn.Execute(@"update t set name='www.lanhusoft.com' where id=@id", new { id = 3 }, trans);
 9          row += conn.Execute("delete from t where id=@id", new { id = 5 }, trans);
10          for (int i = 0; i < 100; i++)
11          {
12              conn.Execute(@"insert t(id, name) values (@id, @name)", new { id = i, name = "www.lanhusoft.com/" + i });
13          }
14          trans.Commit();
15          conn.Close();
16      }

17 }

參見:

http://www.cnblogs.com/cnki/p/5723426.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章