F#连接MSSQL是一件非常自然的事,微软官方提供了很多方便的类库,比如 SqlDataConnection
和 SqlEntityConnection
可以实现非常方便的连接(只需要连接字符串即可)和操作(Linq,F#的query expression)。
而对于MySql,这肯定不是由微软自己来做,但是也并不麻烦,这里介绍两种方式。
可以从这里找MySql的: http://www.connectionstrings.com/mysql-connector-net-mysqlconnection/
MySql的Driver也带了 MySqlConnectionStringBuilder
类方便构建。
是ADO.NET的方式,操作比较简单。 唯一需要装的三方库是 Mysql.Data
,使用nuget或者直接下载dll均可
PM> Install-Package MySql.Data
加上 System.Data
, System.Configuration
和 System.Transaction
引用即可正常工作。
(图上忘记圈 System.Configuration
了)
代码如下:
[<EntryPoint>] let main argv = 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() 0 // return an integer exit code
连接字符串也可以用提供的类生成:
let str = new MySqlConnectionStringBuilder() str.Server <- "服务器地址" str.Port <- 端口 str.Database <- "数据库" str.UserID <- "用户名" str.Password <- "密码" printfn "%s" str.ConnectionString
只展示了查询,其他的增删改一样可以操作,但用ADO.NET代码有点烦所以就没有多写,下面介绍更方便的一种方法。
来自于开源项目 F# Data
使用起来更为简单。
需要的依赖如图
MySql的driver也是需要的
代码更加直接 因为使用了type provider 所以不需要自己另外建实体即可使用
open FSharp.Data.Sql //使用 type provider 生成连接数据库的类型 type SQL = SqlDataProvider<ConnectionString = "server=;port=;database=works;user id=;password=", DatabaseVendor = Common.DatabaseProviderTypes.MYSQL, ResolutionPath = @"D:/datadll"> //这个位置是存放mysql driver dll的位置 //得到上下文 let ctx = SQL.GetDataContext() let fetch name = //查询直接使用上下文即可 注意 ``[works].[user]``是智能提示的 编译期可知 //查询使用query表达式 query { for user in ctx.``[works].[user]`` do where (user.username = name) select user head } [<EntryPoint>] let main argv = //插入使用Create()方法 let newUser = ctx.``[works].[user]``.Create() newUser.username <- "cc" //最后Update执行 ctx.SubmitUpdates() printfn "%A" argv 0 // return an integer exit code
使用 SqlProvider
会更简单一点,在做一些MySql数据库相关的小任务时(比如根据数据生成条形图(配合F# Charting),做一些数据的汇总CSV生成等)更为快捷。