内容简介: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 快速合并磁盘进行扩容操作
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript and Ajax for the Web, Sixth Edition
Tom Negrino、Dori Smith / Peachpit Press / August 28, 2006 / $24.99
Book Description Need to learn JavaScript fast? This best-selling reference’s visual format and step-by-step, task-based instructions will have you up and running with JavaScript in no time. In thi......一起来看看 《JavaScript and Ajax for the Web, Sixth Edition》 这本书的介绍吧!
html转js在线工具
html转js在线工具
RGB CMYK 转换工具
RGB CMYK 互转工具