【问题标题】:ExecuteNonQuery from SQLHelper来自 SQLHelper 的 ExecuteNonQuery
【发布时间】:2021-04-11 06:27:49
【问题描述】:

我在网上找到了这个 SQLHelper,我想用它来运行 SQL 查询。 但是助手想要一个列表而不是字符串。 而且我似乎无法弄清楚如何使 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"

【问题讨论】:

  • 您似乎没有为sql.Execute提供足够的参数
  • @FyodorSoikin 有什么建议吗?我可以让 sql.Read 函数毫无问题地工作。但 Execute 让我白发苍苍。
  • 您能否发布一个示例,说明如何使Read 工作?
  • @FyodorSoikin 添加:)

标签: sql f# executenonquery


【解决方案1】:

您没有为sql.Execute 提供足够的参数。

仔细看:

  • exec 采用三个参数 - bindparametres(顺便说一句,错字)和 query
  • Execute 的正文中,你给它一个参数 - bind
  • 因此,Execute 的结果是一个仍需要其他两个参数的函数 - parametresquery
  • 但是当你调用sql.Execute时,你只给了它一个参数——[query],它最终会绑定到parametres

因此,调用sql.Execute [query] 的结果是另一个函数,它仍然希望在执行其主体之前提供最终参数。事实上,如果你密切关注编译器警告,你会发现编译器实际上会告诉你很多:

这个表达式是一个函数值,即缺少参数。它的类型是...

要修复,请提供正确的参数。从我可以看到的一小部分查询来看,我认为它不应该有任何parametres,所以我会在那里放一个空列表:

sql.Execute [] query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多