나는 F 번호에 SQLServer에의 StoredProc가를 실행하기 위해 다음과 같은 코드를 작성데이터베이스 연결 및 F #을
module SqlUtility =
open System
open System.Data
open System.Data.SqlClient
SqlUtility.GetSqlConnection "MyDB"
|> Option.bind (fun con -> SqlUtility.GetSqlCommand "dbo.usp_MyStordProc" con)
|> Option.bind (fun cmd ->
let param1 = new SqlParameter("@User", SqlDbType.NVarChar, 50)
param1.Value <- user
cmd.Parameters.Add(param1) |> ignore
let param2 = new SqlParameter("@PolicyName", SqlDbType.NVarChar, 10)
param2.Value <- policyName
cmd.Parameters.Add(param2) |> ignore
Some(cmd)
)
|> Option.bind (fun cmd -> SqlUtility.ExecuteReader cmd)
|> Option.bind (fun rdr -> ExtractValue rdr)
let GetSqlConnection (conName : string) =
let conStr = ConfigHandler.GetConnectionString conName
try
let con = new SqlConnection(conStr)
con.Open()
Some(con)
with
| :? System.Exception as ex -> printfn "Failed to connect to DB %s with Error %s " conName ex.Message; None
| _ -> printfn "Failed to connect to DB %s" conName; None
let GetSqlCommand (spName : string) (con : SqlConnection) =
let cmd = new SqlCommand()
cmd.Connection <- con
cmd.CommandText <- spName
cmd.CommandType <- CommandType.StoredProcedure
Some(cmd)
let AddParameters (cmd : SqlCommand) (paramList : SqlParameter list) =
paramList |> List.iter (fun p -> cmd.Parameters.Add p |> ignore)
let ExecuteReader (cmd : SqlCommand) =
try
Some(cmd.ExecuteReader())
with
| :? System.Exception as ex -> printfn "Failed to execute reader with error %s" ex.Message; None
나는 무엇보다도이 코드
첫 번째와 Option.bind의 반복 사용으로 여러 문제가 매우 자극적이며 ... 소음이 추가됩니다. 출력이 없음인지 아닌지 확인하고 그렇지 않은 경우 더 명확한 방법이 필요합니다.
마지막에는 리더, 명령 및 연결을 닫고 + 처리 할 수있는 정리 기능이 있어야합니다. 그러나 현재 파이프 라인의 끝에는 독자가 있습니다.
매개 변수를 추가하는 함수는 반환 된 매개 변수가 여전히 추가 된 상태와 함께 전송 된 명령과 동일하기 때문에 명령 매개 변수의 "상태"를 수정하는 것처럼 보입니다. 좀 더 숙련 된 프로그래머가이 작업을 어떻게 처리했는지 궁금합니다.
Visual Studio에서는 예외 처리를 수행하는 곳마다 경고 메시지를 표시합니다. 사기꾼 "그게 뭐가 잘못"데 MyRecord 서열 =의 getConnection은
이 형식 시험이나 내리 뜬 항상
이 코드는보고 싶지 방법이
하자 x는 개최 말한다 " |> GetCommand "cmd를"|> AddParameter "@name"SqlDbType.NVarchar 50 |> AddParameter "@policyname"SqlDbType.NVarchar 50 |>가 ExecuteReader |> FunctionToReadAndGenerateSeq |
당신이 추천 할 수> CleanEverything는 어떻게 내 코드를 취할 수 있습니다 원하는 수준 및 다른 개량?