gpt4 book ai didi

linq-to-sql - F# LINQ 添加新行到 SQL Server

转载 作者:行者123 更新时间:2023-12-02 03:22:15 26 4
gpt4 key购买 nike

我正在使用 F# 3.0 学习 LINQ。我想知道如何重写我的旧代码以使用 F# 3.0 中的新 LINQ 功能 例如,我在 SQL Server 2008 R2 中创建了一个简单的数据表,数据库名称是 myDatabase。

-- Create the Table1 table.
CREATE TABLE [dbo].[Table1] (
[Id] INT NOT NULL,
[TestData1] INT NOT NULL,
[TestData2] FLOAT (53) NOT NULL,
[Name] NTEXT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);

对于 F# 2.0,我可以使用数据集添加新行,如下所示:

#light
open System
open System.Collections.Generic
open System.Data
open System.Data.SqlClient

let sqlConn = "server=(local); Integrated Security=True; Database=MyDatabase"
let connDB = new SqlConnection(sqlConn)
let sql = "SELECT * FROM Table1"
let da = new SqlDataAdapter(sql, connDB)
let ds = new DataSet()
da.Fill(ds) |> ignore
let commandBuilder: SqlCommandBuilder = new SqlCommandBuilder(da)

for i = 0 to 1 do
let newDR: DataRow = ds.Tables.Item(0).NewRow()
newDR.Item(0) <- (i + 1)
newDR.Item(1) <- (i * 10)
newDR.Item(2) <- ( decimal i ) * 5.0M
newDR.Item(3) <- "Testing" + (i + 1).ToString()
ds.Tables.Item(0).Rows.Add(newDR)
da.Update(ds) |> ignore

现在使用 F# 3.0,如何更好地重写添加新行代码?我想我可以编写一些代码,例如:

#light
open System
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Microsoft.FSharp.Linq

[<Generate>]
type dbSchema = SqlDataConnection<"Data Source=.;Initial Catalog=MyDatabase;Integrated Security=True">
let db = dbSchema.GetDataContext()

try
db.DataContext.ExecuteCommand("INSERT INTO Table1 (Id, TestData1, TestData2, Name) VALUES (1, 10, 0.0, 'Testing1')") |> ignore
with
| exn -> printfn "Exception:\n%s" exn.Message

try
db.DataContext.ExecuteCommand("INSERT INTO Table1 (Id, TestData1, TestData2, Name) VALUES (2, 20, 5.0, 'Testing2')") |> ignore
with
| exn -> printfn "Exception:\n%s" exn.Message

但我不认为新的方式更好,事实上,我认为它更糟糕。在 F# 2.0 中,我可以使用代码生成数据表的值,但如果我必须编写静态 SQL 语句,例如带有预定义值的“INSERT INTO Table1 VALUES(”),那么我想我更愿意通过以下方式插入数据记录来自 SQL Server Management Studio 的手,因为我可以立即看到结果。有人对此有更好的想法吗?谢谢,约翰

最佳答案

您可以使用InsertOnSubmitInsertAllOnSubmit用于漂亮的静态类型记录插入。像这样的东西:

let newRecords =
[for i in [0 .. 1] ->
new Table1(Id=(i + 1), TestData1=(i * 10), TestData2=( decimal i ) * 5.0M, Name="Testing" + (i + 1).ToString())]

db.Table1.InsertAllOnSubmit(newRecords)
db.SubmitChanges()

另请参阅http://msdn.microsoft.com/en-us/library/hh361033(v=vs.110).aspx并在页面中搜索“InsertOnSubmit”(事实上,该示例是为您的 Table1 演示表制作的)。

关于linq-to-sql - F# LINQ 添加新行到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com