`

F# 优雅使用Dapper进行数据库操作

 
阅读更多

本文来自 iteye@fairjm 转截请注明出处

 

之前写过一篇用SQLProvider进行数据库连接的,但实际使用的时候发现兼容性不是很好,在用mysql的时候很多表都找不到,要反复rebuild.

直接使用ADO.NET的话就显得麻烦.
来看一下ADO.NET一个查询到例子

let cStr =@"Server=地址;Port=端口;Database=数据库名称;Uid=用户名;Pwd=密码;"
use conn =newMySqlConnection(cStr)
let command = conn.CreateCommand(
  CommandText="SELECT * FROM user LIMIT 1",
  CommandType=CommandType.Text)
conn.Open()
use reader = command.ExecuteReader()
let idOrder = reader.GetOrdinal("userid")
if reader.Read() then
    // int 可以用string
    printfn "%s"<| reader.GetString(idOrder)
    printfn "%d"<| reader.GetInt32("userid")
    printfn "%s"<| reader.GetString("username")
    printfn "%A"<| reader.GetDateTime("created") 
    // date 也可以用string
    printfn "%s"<| reader.GetString("created")
reader.Close()
conn.Close()

如果要用参数化的话还需要以下代码来设置SqlCommand

//创建SqlCommand对象SqlCommand cmd = conn.CreateCommand();
//默认就是text
cmd.CommandType=CommandType.Text;
//sql语句
cmd.CommandText="select * from products = @ID";  
cmd.Parameters.Add("@ID",SqlDbType.Int);
//给参数sql语句的参数赋值
cmd.Parameters["@ID"].Value=1;

作为常常写脚本的工具,我对数据库查询的需求是使用简单方便,因为是写脚本,所以不会涉及到很多表的JOIN,一对多,多对多的处理等等,能方便读取行数据就可以了.

这一点Dapper可以很好满足.Dapper可以使用dynamic object作为查询参数和返回结果.
但FSharp似乎没有直接使用dynamic object的方式(有的话欢迎打脸...没找着),这里可以借用第三方的项目来.比如FSharp.Interop.Dynamic.
使用之后构建查询就方便多了:

let query =ExpandoObject()
query?userId <-1

也可以直接解析返回结果

需要的扩展:

Install-Package FSharp.Interop.Dynamic
Install-Package MySql.Data -Version 6.9.9
Install-PackageDapper

代码:

open MySql.Data.MySqlClient
open FSharp.Interop.Dynamic
open Dapper
open System
open System.Dynamic

let getConnection (addr, user,pass, db, port)=
    let builder =newMySqlConnectionStringBuilder()
    builder.Server<- addr
    builder.UserID<- user
    builder.Password<-pass
    builder.Database<- db
    builder.Port<- port
    let conn =newMySqlConnection(builder.ConnectionString)
    conn.Open()
    conn

let conn = getConnection("","","","",3306)
let query =ExpandoObject()
query?userId <-1
let obj = conn.QueryFirst("select * from user where userid = @userId", query)
let objs = conn.Query("select * from user limit 10")
printfn "%A" obj?username
objs
|>Seq.iter (fun e -> printfn "%s" e?username)
conn.Close()

对比上面ADO.NET的例子 使用就比较简单直接了~
还有one to many的例子有点长 可以看gist的代码: https://gist.github.com/fairjm/8d2c8b2fd8db549364447a78d2bdad4f

 

本文来自 iteye@fairjm 转截请注明出处

0
0
分享到:
评论

相关推荐

    基于Dapper操作数据库Demo

    **基于Dapper操作数据库Demo详解** Dapper是一个轻量级的.NET数据访问层(DAL)框架,由Stack Overflow团队开发并广泛应用于其生产环境。它并非一个完整的对象关系映射器(ORM),而是提供了一种高效、灵活的方式来...

    Dapper访问多数据库

    在处理数据库操作时,Dapper提供了一种更接近原生SQL的方式来操作数据库,同时保持了与.NET Framework的紧密集成。本文将深入探讨如何使用Dapper访问多种类型的数据库,包括Oracle、MySql和Sql Server,并且会提及...

    Dapper操作数据库实例.zip

    标题“Dapper操作数据库实例”暗示了我们将探讨如何使用Dapper进行数据库交互。Dapper的核心优势在于其灵活性,它允许开发者编写原生的SQL查询,同时利用C#的强大功能来处理数据。在处理大批量数据时,Dapper的性能...

    c#使用dapper连接SQL数据库

    本文将深入探讨如何在C#中使用Dapper来连接和操作SQL数据库,以及如何通过外部配置文件灵活地管理数据库连接。 首先,我们需要了解Dapper的基本用法。Dapper是一个高性能、低侵入性的数据访问层,它不提供实体模型...

    .net5 dapper封装操作数据库

    本文将深入探讨如何在.NET 5环境中使用Dapper进行数据库操作的封装。首先,我们来看`DapperHelper.cs`,这是实现Dapper操作的核心类。这个类通常会包含执行SQL查询和命令的方法,如`ExecuteNonQuery`用于执行非查询...

    Dapper实例_操作数据库demo

    在这个"Dapper实例_操作数据库demo"中,我们将探讨Dapper如何用于执行基本的数据库操作,包括连接、查询、插入、更新和删除。对于初学者来说,这是一个很好的起点,可以帮助理解Dapper的工作原理和使用方式。 1. **...

    【ASP.NET编程知识】.NET Core Dapper操作mysql数据库的实现方法.docx

    本文介绍了如何在 .NET Core 中使用 Dapper 操作 Mysql 数据库的实现方法,包括安装 MySql.Data Nuget 包、配置 Mysql 连接字符串、创建 BaseRepository 类和使用 Dapper 操作 Mysql 数据库等。

    vs2010 dapper数据库操作文件SqlMapper

    本文将深入探讨如何在Visual Studio 2010环境下使用Dapper这一轻量级的ORM(对象关系映射)库进行数据库操作。Dapper因其高效、简单易用的特性,受到了很多开发者的喜爱。本文将以`SqlMapper.cs`文件为例,详细讲解...

    dapper paper from goodle

    ### Dapper:大规模分布式系统追踪基础设施 #### 概述 Dapper是谷歌开发的一款用于追踪大规模分布式系统远程过程调用(RPC)的设计方案。在现代互联网服务中,复杂且庞大的分布式系统十分常见,这些系统由多个软件...

    C# Dapper增删改查使用示例源码带数据库脚本

    在这个“C# Dapper增删改查使用示例源码带数据库脚本”压缩包中,我们可以深入学习如何利用Dapper进行数据库操作,包括插入(Insert)、更新(Update)、删除(Delete)和查询(Select)。 1. **Dapper简介** ...

    【Dapper封装类】

    Dapper封装类,对dapper的增删查改和存储过程进行封装

    .Net封装Dapper dbContext类

    封装Dapper dbContext类,对Dapper 的增删查改进行封装

    C#之dapper对SqlServer进行增删改查

    ORM(Object-Relational Mapping)技术,如Entity Framework,允许开发者用对象模型来操作数据库,简化了数据库操作的复杂性。Dapper,作为轻量级的ORM库,因其高效性能和易用性,被越来越多的C#开发者所青睐。本...

    T4生成类和Dapper访问Mysql数据库

    T4(Text Template Transformation Toolkit)是Visual Studio内置的一种文本生成工具,它允许开发者创建可执行的代码生成器,而Dapper则是一种轻量级的ORM(对象关系映射)框架,它提供了高效的数据库操作能力。...

    .NET Core Dapper操作mysql数据库的实现方法

    如何在.NET Core中使用Dapper操作Mysql数据库呢,让我们跟随镜头(手动下翻)一看究竟。 配置篇 俗话说得好,欲要善其事必先利其器。首先,我们要引入MySql.Data 的Nuget包。有人可能出现了黑人脸,怎么引入。也罢,看...

    Dapper UnitOfWork

    3. **DapperRepository类**:实现了Repository接口,使用Dapper进行实际的数据操作。这个类将具体的SQL查询语句和Dapper的Execute、Query等方法结合,实现对数据库的操作。 4. **实体类**:在`Database`目录下,...

    WinForm程序源码,使用Dapper读取mssql数据库

    WinForm程序源码,使用Dapper读取mssql数据库,控件使用devexpress,比较简单,一看就明白,小白也没有问题。欢迎下载查看。https://blog.csdn.net/caifox/article/details/135430855 这里有我写的一步一步操作的...

    使用Dapper封装的项目底层代码

    在.NET开发中,Dapper常用于提高数据库操作的效率,尤其是在需要进行大量手动SQL查询时。这个项目是基于Dapper进行封装,旨在简化数据库操作的底层代码,减少重复工作,同时提供对数据库结构变化的灵活适应。 在...

    ef core 与 dapper 组合使用demo

    例如,进行大量数据的批处理,或者执行存储过程时,Dapper的效率更高。Dapper的使用方式如下: 1. 定义数据库连接:使用`SqlConnection`或其他数据库特定的连接类。 2. 编写SQL:直接编写SQL语句,可以是简单的...

Global site tag (gtag.js) - Google Analytics