转载

不只是MSSQL F#连接MySql

F#连接MSSQL是一件非常自然的事,微软官方提供了很多方便的类库,比如 SqlDataConnectionSqlEntityConnection 可以实现非常方便的连接(只需要连接字符串即可)和操作(Linq,F#的query expression)。

而对于MySql,这肯定不是由微软自己来做,但是也并不麻烦,这里介绍两种方式。

关于连接字符串

可以从这里找MySql的: http://www.connectionstrings.com/mysql-connector-net-mysqlconnection/

MySql的Driver也带了 MySqlConnectionStringBuilder 类方便构建。

使用MySql的Driver提供的工具

是ADO.NET的方式,操作比较简单。 唯一需要装的三方库是 Mysql.Data ,使用nuget或者直接下载dll均可

PM> Install-Package MySql.Data   

加上 System.DataSystem.ConfigurationSystem.Transaction 引用即可正常工作。

不只是MSSQL F#连接MySql

(图上忘记圈 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代码有点烦所以就没有多写,下面介绍更方便的一种方法。

使用SqlProvider

来自于开源项目 F# Data

使用起来更为简单。

需要的依赖如图

不只是MSSQL F#连接MySql

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生成等)更为快捷。

正文到此结束
Loading...