F# 连接在线MySQL数据库并执行查询。

3

我正在制作一个F#项目,需要对在线mysql数据库进行一些查询。请问有人可以帮助我吗?我需要像这样的东西。

    \\  Connect to DB
    let servername = "localhost"
    let username = "username"
    let password = "password"
    \\ Code that connects to db
    \\ Print error message if can connect 

    \\ Query 
    let query = "SELECT * FROM table ..."
    \\ Code that executes query 
    \\ Error Message if query not executed  

1
sqlprovider 可以让你连接到 MySQL。https://dev59.com/eHrZa4cB1Zd3GeqP2nRk - s952163
1
什么是“在线MySQL数据库”? - FoggyFinder
数据库位于Web服务器上,类似于Web主机,而不是像Wamp一样的本地数据库。 - Alexander Andersen
什么是Wamp?如果您知道主机名并且可以解析它,您仍然应该能够连接。几乎所有的数据库都在某个服务器上。您是否收到错误信息? - s952163
你的问题解决了吗? - FoggyFinder
2个回答

3
你应该安装MySQL的.NET驱动程序,然后安装SQLprovider。在文档中有MySQL的示例。你可以像这样连接到数据库并查询它:
type sql = SqlDataProvider<
                dbVendor,
                connString,
                ResolutionPath = resPath,
                IndividualsAmount = indivAmount,
                UseOptionTypes = useOptTypes,
                Owner = "HR"
            >
let ctx = sql.GetDataContext()

let employees = 
    ctx.Hr.Employees 
    |> Seq.map (fun e -> e.ColumnValues |> Seq.toList)
    |> Seq.toList

connstring 的格式应该是这样的:

[<Literal>]
let connString  = "Server=localhost;Database=HR;User=root;Password=password"

您还应该阅读https://msdn.microsoft.com/visualfsharpdocs/conceptual/walkthrough-accessing-a-sql-database-by-using-type-providers-%5bfsharp%5d,这是与使用类型提供程序访问 SQL 数据库有关的指南。


1
我认为 SQLProvider 是首选,因为这样你可以对逻辑进行验证并注意到数据库的变化。
但是如果你想手动连接,也是可以的:
// Reference Nuget package MySql.Data
//#r @"./../packages/MySql.Data/lib/net40/MySql.Data.dll"

open System
open MySql.Data.MySqlClient

let cstr = "server = localhost; database = myDatabase; uid = username;pwd = password"

let ExecuteSqlAsync (query : string) parameters =
  use rawSqlConnection = new MySqlConnection(cstr)
  async {
    do! rawSqlConnection.OpenAsync() |> Async.AwaitIAsyncResult |> Async.Ignore
    use command = new MySqlCommand(query, rawSqlConnection)
    parameters |> List.iter(fun (par:string*string) -> command.Parameters.AddWithValue(par) |> ignore)
    let! affectedRows = command.ExecuteNonQueryAsync() |> Async.AwaitTask
    match affectedRows with
    | 0 -> "ExecuteSql 0 rows affected: " + query |> Console.WriteLine
           ()
    | x -> ()
  }

let ExecuteSql (query : string) parameters =
    use rawSqlConnection = new MySqlConnection(cstr)
    rawSqlConnection.Open()
    use command = new MySqlCommand(query, rawSqlConnection)
    parameters |> List.iter(fun (par:string*string) -> command.Parameters.AddWithValue(par) |> ignore)
    let affectedRows = command.ExecuteNonQuery()
    match affectedRows with
    | 0 -> "ExecuteSql 0 rows affected: " + query |> Console.WriteLine
           ()
    | x -> ()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接