在 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的主要内容,如果未能解决你的问题,请参考以下文章

Observable 的 Operators集合

关于redux-observable的一点理解

Rxjava2 Observable的数据变换详解及实例

RxSwift之常用的高阶函数

如何在 Observable.create (RxSwift) 中返回/转发一个 observable

在乳胶中的方程中缺少 endgroup插入错误?