F#: MySQLへのアクセス

a0002_009631

ここのところHaskellづいていましたが、事情によりF#で遊んでみることにしました。

ということで、MySQLへアクセスしてみるプログラムを書いてみました。

前提としては「Haskell: MySQLへのアクセス」と同様に「PC-KEIBA」で構築したデータベースを使うことにしました。

open System;
open System.Data.Common;

type HorseInfo(kettoTorokuBango : String, bamei : String) = 
    let kettoTorokuBango = kettoTorokuBango
    let bamei = bamei

    new () =
        HorseInfo("", "")

    new (reader : DbDataReader) =
        HorseInfo(reader.GetString(0), reader.GetString(1))

    member HorseInfo.show =
        printfn "%s\t%s" kettoTorokuBango bamei

    static member getCommand (conn : DbConnection) : DbCommand =
        let command = conn.CreateCommand()
        command.CommandText <- @"select ketto_toroku_bango,bamei from jvd_kyosoba_master where ketto_toroku_bango=@KettoTorokuBango"
        let paramKettoTorokuBango = command.CreateParameter()
        paramKettoTorokuBango.ParameterName <- @"KettoTorokuBango"
        ignore (command.Parameters.Add(paramKettoTorokuBango))
        command.Prepare()
        command

    static member create (cmd : DbCommand) (kettoTorokuBango : String) : HorseInfo =
        cmd.Parameters.Item("KettoTorokuBango").Value <- kettoTorokuBango
        use reader = cmd.ExecuteReader()
        if (reader.Read()) then
            HorseInfo(reader)
        else
            HorseInfo()

let getHorseInfoArray (conn : DbConnection) (kettoTorokuBango : String []) : HorseInfo [] =
    use command = HorseInfo.getCommand conn
    Array.map (HorseInfo.create command) kettoTorokuBango

[<EntryPoint>]
let main argv =
    use conn = new MySql.Data.MySqlClient.MySqlConnection "userid=XXXX;password=XXXX;database=pckeiba;Host=XXXX"
    conn.Open()
    let horseInfoList = getHorseInfoArray conn argv
    Array.iter (fun (x : HorseInfo) -> x.show) horseInfoList

    0 // 整数の終了コードを返します

ものすごく手続き型になってしまっていますが、こういう書き方できるのもF#のいいところだと思うので、慣れてくるまでは手続きチックな書き方でいいかなぁ、なんて思ってます。

スポンサーリンク

フォローする

スポンサーリンク