在 Observable 中插入 F# SQL
Posted
技术标签:
【中文标题】在 Observable 中插入 F# SQL【英文标题】:F# SQL Insert in Observable 【发布时间】:2014-09-06 10:28:49 【问题描述】:我有一个 SQL Server CE 数据库,我正在尝试使用事件中的值进行更新,但是当我尝试从可观察的事件中插入时,控制台会打印出来
有人知道这是为什么吗?
在 observable 之外工作的代码:
let test1 =
use con = new SqlCeConnection (@"Data Source=C:\Users\Database1.sdf")
con.Open()
let AA = "Enter"
let BB = "Enter"
use cmd = new SqlCeCommand("insert into Table1 (A,B) values (@A, @B)", con)
let A1 = new SqlCeParameter("A", "1")
let B1 = new SqlCeParameter("B", "2")
do cmd.Parameters.Add A1 |>ignore
do cmd.Parameters.Add B1 |>ignore
do cmd.ExecuteNonQuery() |>ignore
printfn "%s" "complete1"
()
返回 的代码,还要注意最后的 printfn 没有执行。
let sqlsubmit = stream|> Observable.map (fun x ->
use con = new SqlCeConnection (@"Data Source=C:\Users\Database1.sdf")
con.Open()
let AA = "Enter"
let BB = "Enter"
use cmd = new SqlCeCommand("insert into Table1 (A,B) values (@A, @B)", con)
let A1 = new SqlCeParameter("A", "1")
let B1 = new SqlCeParameter("B", "2")
do cmd.Parameters.Add A1 |>ignore
do cmd.Parameters.Add B1 |>ignore
do cmd.ExecuteNonQuery |>ignore
printfn "%s" "complete1"
)
我在 Linq 中尝试过 SubmitChanges()
,效果也一样。
这是用于 LINQ SubmitChanges 的类型:
[<Table(Name = "Table1")>]
type Macro (A:string, B:string)=
[<Column(IsPrimaryKey=true)>]
member this.A = A
[<Column>]
member this.B = B
【问题讨论】:
没有printfn "%s" "complete1"
的边可以用printfn "complete1"
代替,不需要"%s"
。此外,您的表名不同
【参考方案1】:
F# 中的unit
类型是单例类型;它的值由()
指定。
()
值在编译后的代码中由 null
表示,这就是您看到代码返回 null
的原因。
【讨论】:
把最后的()删掉了,又试了SubmitChanges删了,还是都返回了()
放在最后,如果表达式的类型是'unit',函数返回单位值——即null
,而不是@ 987654328@ 就像在 C# 中一样。以上是关于在 Observable 中插入 F# SQL的主要内容,如果未能解决你的问题,请参考以下文章