使用 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;
}
}
}
问题:
- 在 C# 中,我添加了对 MySql.Data.dll 的引用。我如何在 F# 中做到这一点?
- #r 似乎有点问题……那条线去哪儿了? .fsproj 文件中的某处?
- 此代码在 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
(注意:我是用眼睛翻译的,所以可能不完全正确。)
刚开始尝试使用 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;
}
}
}
问题:
- 在 C# 中,我添加了对 MySql.Data.dll 的引用。我如何在 F# 中做到这一点?
- #r 似乎有点问题……那条线去哪儿了? .fsproj 文件中的某处?
- 此代码在 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
(注意:我是用眼睛翻译的,所以可能不完全正确。)