内容简介:F# 优雅使用Dapper进行数据库操作
本文来自图灵社区@fairjm 转截请注明出处
之前写过一篇用 SQLProvider
进行数据库连接的,但实际使用的时候发现兼容性不是很好,在用 mysql 的时候很多表都找不到,要反复rebuild.
直接使用 ADO.NET
的话就显得麻烦.
来看一下 ADO.NET
一个查询到例子
let cStr = @"Server=地址;Port=端口;Database=数据库名称;Uid=用户名;Pwd=密码;"
use conn = new MySqlConnection(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 <- 147090
也可以直接解析返回结果
需要的扩展:
Install-Package FSharp.Interop.Dynamic Install-Package MySql.Data -Version 6.9.9 Install-Package Dapper
代码:
open MySql.Data.MySqlClient
open FSharp.Interop.Dynamic
open Dapper
open System
open System.Dynamic
let getConnection (addr, user, pass, db, port) =
let builder = new MySqlConnectionStringBuilder()
builder.Server <- addr
builder.UserID <- user
builder.Password <- pass
builder.Database <- db
builder.Port <- port
let conn = new MySqlConnection(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
的例子 使用就比较简单直接了~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 在Golang中对MySQL进行操作
- SpringBoot中利用MyBatis进行数据操作
- 使用Log4J进行日志操作
- []==''返回?为什么?运算符==进行了什么操作?
- 移动端上传图片进行平移放大缩小操作后生成海报
- Linux 下使用 LVM 快速合并磁盘进行扩容操作
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
营销三大算法
刘学林、刘逸春、张新春、王颖、余彬晶、刘锦炽、董少灵、沈逸超、王锐睿、孙静若 / 上海交通大学出版社 / 2018-1-31 / 88.00元
未来的营销应该是数字化的,即数字营销。以数据为本,用演算做根,数字营销能够演算生活的方方面面。在数字营销领域,市场的整个投入、产出带来什么东西?企业一定要狠清楚地知道,这是做数字营销的本质。数字营销和企业做生意的本质是一样的,目的都是以投入换取产出。 本书由正和岛数字营销部落编写,基于大量企业的案例与数据,提出了营销三大核心算法与一套全局营销系统,帮助企业CEO与营销人员科学化建立全局营销系......一起来看看 《营销三大算法》 这本书的介绍吧!
RGB HSV 转换
RGB HSV 互转工具
HEX HSV 转换工具
HEX HSV 互换工具