首页 > 解决方案 > F# 参数化插入 Sql

问题描述

试图了解如何使用SqlCommandProvider. 到目前为止我有这个

[<Literal>]
let connectionString = @"Data Source=.\SQL2019;Initial Catalog=MyDb;Trusted_Connection=True;"

type InsertCommand = 
    SqlCommandProvider<"INSERT INTO Category (Name, Value, Website) VALUES (@name, @value, @website)", connectionString, SingleRow = true>

let cmdInsert = new InsertCommand()

let insertCategories (data: seq<string * string>) =
    data
    |> Seq.iter
        (
            fun x ->
                cmdInsert.Execute(name = fst x, value = Int32.Parse(snd x), website = "www.example.com") |> ignore
        )

但是在线上new InsertCommand()我收到了这个错误

The member or object constructor 'SqlCommandProvider,CommandText="...",ConnectionStringOrName="...",SingleRow="True"'
 does not take 0 argument(s). An overload was found taking 2 arguments

有人可以解释一下吗?如果没有,有人可以举例说明如何进行参数化插入查询吗?

标签: f#

解决方案


错误消息告诉您,您缺少所提供类型的构造函数的参数,即您的InsertCommand类型。我没有 SQL 数据库来尝试这个,但提供的类型SqlCommandProvider应该有一个重载,它需要一个连接字符串和(可选)超时。

以下应该可以解决问题:

let cmdInsert = new InsertCommand(connectionString)

推荐阅读