使用 MySQL 的 F# 程序的基本模型

Basic Model of a F# program using MySQL

刚开始尝试使用 F#。我有这段代码在 C# 中工作:

using MySql.Data.MySqlClient;
using System;
using System.IO;

namespace SandboxExecuteReader
{
    class Program
    {
        static void Main(string[] args)
        {
            MySqlConnection myConnection = new MySqlConnection();
            MySqlCommand myCommand = new MySqlCommand();
            if (!SQLdbOpen(myConnection, myCommand)) return;
            DoWork(myCommand);
            myConnection.Close();
            return;
        }

        private static void DoWork(MySqlCommand myCommand)
        {
            myCommand.CommandText = "SELECT * FROM xxx.mytable";
            using (var reader = myCommand.ExecuteReader())
            {
                while (reader.Read())
                {
                    string Field1 = reader.GetString(reader.GetOrdinal("Field1"));
                    string Field2 = reader.GetString(reader.GetOrdinal("Field2"));
                    string Field3 = reader.GetString(reader.GetOrdinal("Field3"));
                    Console.WriteLine("{0} {1} {2}", Field1, Field2, Field3);
                }
            }
        }

        private static bool SQLdbOpen(MySqlConnection myConnection, MySqlCommand myCommand)
        {
            /* 
            * Open Connection to SQL DB
            */

            string ConnectionString = "server=(someIP); uid=Me; password=MyPass";

            try
            {
                myConnection.ConnectionString = ConnectionString;
                myConnection.Open();
                myCommand.Connection = myConnection;
            }
            catch (MySqlException E)
            {
                Console.WriteLine("Open Error: {0}", E.Message);
                Console.WriteLine("Press RETURN to continue or CONTROL-C to abort");
                Console.ReadLine();
                return false;
            }

            return true;
        }
    }
}

问题:

  1. 在 C# 中,我添加了对 MySql.Data.dll 的引用。我如何在 F# 中做到这一点?
  2. #r 似乎有点问题……那条线去哪儿了? .fsproj 文件中的某处?
  3. 此代码在 F# 中的外观如何?

您需要决定的第一件事是您要将此 运行 作为独立脚本(.fsx 文件)还是项目(由 .fs 源文件和一个 .fsproj 项目文件)。

如果这将成为一个项目,它就像 C# 项目一样工作:您在 .fsproj 文件中添加对 MySql.Data.dll 的引用。如果您使用 Visual Studio,您可以右键单击该项目并通过“管理 NuGet 包...”菜单项在 NuGet 中找到 MySql.Data

如果它是一个独立的脚本,您可以通过将此行放在最顶部来添加对 MySql 的 NuGet 引用:#r "nuget: MySql.Data".

从 C# 转换代码有点复杂,但您的 main 函数可能如下所示(假设这是一个 .fs 文件):

open MySql.Data.MySqlClient

let sQLdbOpen (myConnection : MySqlConnection) (myCommand : MySqlCommand) =
    // ...
    true

let doWork (myCommand : MySqlCommand) =
    // ...
    ()

[<EntryPoint>]
let main args =
    use myConnection = new MySqlConnection()
    use myCommand = new MySqlCommand()
    if sQLdbOpen myConnection myCommand then
        doWork myCommand
        myConnection.Close()
    0

(注意:我是用眼睛翻译的,所以可能不完全正确。)