Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何使用Expr用法中的参数 让我们使用连接表达式= let Expr(连接:MySqlConnection)= 尝试 尝试 康涅狄格州公开赛 具有 | :? MySqlException作为ex ->printfn“异常!%s”ex.消息 出口(康涅狄格州) 最后 尝试 连接关闭()|>忽略 具有 | :? MySqlException作为ex ->printfn“异常!%s”ex.消息 使用(新的MySqlConnection)(ConnectionString= “server=“+MySQLServer+”; uid=“+MySQLUID+”; pwd=“+MySQLPW+”; database=“+MySQLDB+”; 字符集=utf8;“”)Expr 成员x.reportToDB(消息:字符串)= useConnection/_F# - Fatal编程技术网

F# 如何使用Expr用法中的参数 让我们使用连接表达式= let Expr(连接:MySqlConnection)= 尝试 尝试 康涅狄格州公开赛 具有 | :? MySqlException作为ex ->printfn“异常!%s”ex.消息 出口(康涅狄格州) 最后 尝试 连接关闭()|>忽略 具有 | :? MySqlException作为ex ->printfn“异常!%s”ex.消息 使用(新的MySqlConnection)(ConnectionString= “server=“+MySQLServer+”; uid=“+MySQLUID+”; pwd=“+MySQLPW+”; database=“+MySQLDB+”; 字符集=utf8;“”)Expr 成员x.reportToDB(消息:字符串)= useConnection/

F# 如何使用Expr用法中的参数 让我们使用连接表达式= let Expr(连接:MySqlConnection)= 尝试 尝试 康涅狄格州公开赛 具有 | :? MySqlException作为ex ->printfn“异常!%s”ex.消息 出口(康涅狄格州) 最后 尝试 连接关闭()|>忽略 具有 | :? MySqlException作为ex ->printfn“异常!%s”ex.消息 使用(新的MySqlConnection)(ConnectionString= “server=“+MySQLServer+”; uid=“+MySQLUID+”; pwd=“+MySQLPW+”; database=“+MySQLDB+”; 字符集=utf8;“”)Expr 成员x.reportToDB(消息:字符串)= useConnection/,f#,F#,useConnection似乎需要一个采用MySqlConnection的函数。它为该函数提供所需的连接对象 解决办法是: let useConnection expr = let Expr(conn : MySqlConnection) = try try conn.Open() with | :? MySqlException as ex

useConnection
似乎需要一个采用
MySqlConnection
的函数。它为该函数提供所需的连接对象

解决办法是:

    let useConnection expr =
    let Expr(conn : MySqlConnection) =
        try
            try
                conn.Open()
            with
            | :? MySqlException as ex
                ->  printfn "Exception! %s" ex.Message
            expr(conn)
        finally 
            try
                conn.Close() |> ignore
            with
            | :? MySqlException as ex
                ->  printfn "Exception! %s" ex.Message
    using (new MySqlConnection(ConnectionString = 
           "server      = " + MySQLServer + ";
            uid         = " + MySQLUID + ";
            pwd         = " + MySQLPW + ";
            database    = " + MySQLDB + ";
            Charset=utf8;")) Expr

member x.reportToDB (msg:string) =
    useConnection // <--- SO HERE I WANT TO KNOW WHAT IS conn
       (let cmd = new MySqlCommand(Connection = conn)
        cmd.CommandText <- ("insert into "+MySQLTable+"(system,dt,logMessage);")
        ignore <| cmd.Parameters.AddWithValue("?system", Net.Dns.GetHostName())
        ignore <| cmd.Parameters.AddWithValue("?dt", DateTime.Now.ToString() )
        ignore <| cmd.Parameters.AddWithValue("?logMessage", msg )
        try
            try
                cmd.ExecuteNonQuery() |> ignore
            with
            | :? MySqlException as ex when ex.Message.Contains("Duplicate entry")
                ->  printfn "MySQL Duplicate entry Exception: discarding the data set! %s" ex.Message
                    printfn ""
            | :? MySqlException as ex
                ->  printfn "MySQL Exception, requeing data set and trying again later! %s" ex.Message
                    reraise()
        with
        | :? MySqlException as ex
            ->  printfn "Exception! %s" ex.Message)
编辑:
useConnection
函数中添加类型注释可能会更清晰:

useConnection (fun conn (* here's your connection *) ->
   let cmd = new MySqlCommand(Connection = conn)
   // etc.

这段代码目前看起来不像是编译的-我认为第一行不应该缩进,并且注释后的代码需要是lambda函数lamba是个好主意:)。您当前没有使用它们。您将它们插入了
useConnection
函数中,但没有在
x.reportToDB
中检索它们。如果你编译你的代码,你应该在底部的大块中得到一个语法错误。但是你的代码能像我希望的那样工作吗?我的意思是我仍然对这个有趣的conn->你对
fun
关键字感到困惑吗?它允许您编写函数,而无需给函数命名。以下是MSDN的解释:
let useConnection (expr : MySqlConnection -> 'a) : 'a =
    let Expr(conn : MySqlConnection) : 'a =
    // etc.