>source

SQL 쿼리를 실행하려는 SQLHelper를 온라인에서 찾았습니다. 그러나 도우미는 문자열 대신 목록을 원합니다. 그리고 executeNonQuery를 작동시키는 방법을 알아낼 수없는 것 같습니다.

  type SqlHelper (connection) =
        let exec bind parametres query = 
            use conn = new SqlConnection (connection)
            conn.Open()
            use cmd = new SqlCommand (query, conn)
            parametres |> List.iteri (fun i p -> 
                            cmd.Parameters.AddWithValue(sprintf "@p%d"  i, box p) |> ignore)
            bind cmd
    
        member __.Execute = exec <| fun c -> c.ExecuteNonQuery() |> ignore
        member __.Scalar  = exec <| fun c -> c.ExecuteScalar()
        member __.Read f  = exec <| fun c -> [ let read = c.ExecuteReader()
                                               while read.Read() do 
                                                   yield f read ]
let sql = new SqlHelper (connectionString)

내가 가진 쿼리는 테이블을 도핑하는 것입니다.

이렇게 실행하려고합니다.

let emptyDb =
    let query =
    "SET NOCOUNT ON
      DROP TABLE IF EXISTS #STUFF
      ...
      ...    
      END"
sql.Execute [query ]

이것은 컴파일되지만 실행해도 아무 일도 일어나지 않습니다. 어떤 아이디어? 미리 감사드립니다

편집 : sql.Read 기능이 완벽하게 작동합니다.

let GetToken Id= 
    sql.Read (fun r -> { token = unbox r.[0] })
             [Id;] 
             "SELECT Token
             FROM [dbo].[Token]
             WHERE id= 0"
GetToken "1337"


  • 답변 # 1

    충분한 매개 변수를 제공하지 않았습니다. sql.Execute .

    잘 봐봐:

    exec 세 개의 매개 변수를 사용합니다. bind , parametres (btw, 오타) 및 query

    몸에 Execute 하나의 매개 변수를 제공합니다. bind

    따라서 결과 Execute 다른 두 매개 변수를 예상하는 함수입니다. parametresquery

    하지만 당신이 전화 할 때 sql.Execute , 하나의 매개 변수 만 제공합니다. [query] 에 바인딩됩니다. parametres

    따라서 부름의 결과 sql.Execute [query] 본문이 실행되기 전에 최종 매개 변수가 제공 될 것으로 예상하는 또 다른 함수입니다. 사실, 컴파일러 경고에 세심한주의를 기울이면 컴파일러가 실제로 다음과 같이 많은 것을 알려주는 것을 볼 수 있습니다.

    This expression is a function value, i.e. is missing arguments. Its type is ...

    수정하려면 올바른 매개 변수를 제공하십시오. 제가 볼 수있는 당신의 작은 질문으로 판단 할 때, parametres , 그래서 빈 목록을 거기에 넣겠습니다.

    sql.Execute [] query
    
    

  • 이전 python - 플라스크 - 경로가 없지만 동일한 오류가 계속 발생합니다
  • 다음 r - 각 ID에 대해 하나의 레코드를 가질 수 있도록 df를 재구성하는 방법