Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#SqlProvider-如何访问存储过程结果?_F#_Type Providers - Fatal编程技术网

F#SqlProvider-如何访问存储过程结果?

F#SqlProvider-如何访问存储过程结果?,f#,type-providers,F#,Type Providers,我在一个F#项目中使用NuGet(v1.1.42)的SQLProvider访问我们的MSSQL数据库 我指的是这里的示例代码,以及GitHub上的源代码测试 #r@“…\packages\SQLProvider.1.1.42\lib\net451\FSharp.Data.SQLProvider.dll” #r@“…\System.Data.Linq.dll” 开放系统 打开FSharp.Data.Sql 打开FSharp.Data.Sql.Common 开放系统.Data.Linq 类型Seri

我在一个F#项目中使用NuGet(v1.1.42)的SQLProvider访问我们的MSSQL数据库

我指的是这里的示例代码,以及GitHub上的源代码测试

#r@“…\packages\SQLProvider.1.1.42\lib\net451\FSharp.Data.SQLProvider.dll”
#r@“…\System.Data.Linq.dll”
开放系统
打开FSharp.Data.Sql
打开FSharp.Data.Sql.Common
开放系统.Data.Linq
类型SeriesResult={..fields..}
[]
让ConnectionString=@“connStr”
类型Sql=SqlDataProvider<
ConnectionString=ConnectionString,
DatabaseVendor=Common.DatabaseProviderTypes.MSSQLSERVER>
让db=Sql.GetDataContext()
让测试=
[
对于db.Procedures.MyStoredProcedure.Invoke(“param”).ResultSet do中的f
产量f.MapTo()
]
我需要访问MyStoredProcess调用的结果,但是
ResultSet
错误与
错误FS0039:字段、构造函数或成员“ResultSet”未定义“
。我还为ColumnValues和MapTo获取此结果(可能是因为类型未知)

有没有其他我应该参考的图书馆

我有:FSharp.Core、FSharp.Data、FSharp.Data.SqlProvider、mscorelib、System、System.Core、System.Data、System.Data.Linq、System.Xml.Linq

谢谢


(想用SQLProvider标记,但不能!)

一个可能的原因是intelli sense线程可能在等待SQL提供程序的响应时超时

存储的过程和携带结果集的类型集
ResultSet
是延迟计算的(当您键入
时)。这在某种程度上是好的,因为这意味着提供程序不会在实例化时对整个数据库进行内省,引入许多您可能不会使用的内容。但是,它确实有副作用,即在第一个请求完成时,需要在
中做大量的工作,我们会在之后缓存结果。我相信icrosoft有一个指标表明,任何intelli sense工作都应该在250ms内完成,但我不确定实际的线程超时是多少。对于C#和F#这样的语言,达到250ms的响应目标可能是大型解决方案的一个大问题,但如果将数据库混入其中(即使是一个小型本地数据库),这将成为一个很难达到的目标


只有Visual Studio知道它为什么在添加引用之前没有恢复并重试,但通常情况下,关闭并重新打开文件就足够了。在极少数情况下,从解决方案中卸载项目并重新加载。

这很奇怪……我为每个引用的DLL添加了一个打开,Visual Studio终于识别了d结果集。想知道它是哪一个引用,我把它们全部删除了——从那以后它一直在工作!即使在多次清理和删除垃圾箱之后,这可能只是一个VS怪癖。如果有人能对此有所了解,我仍然感兴趣,因为这似乎与F#很常见。
#r @"....\packages\SQLProvider.1.1.42\lib\net451\FSharp.Data.SqlProvider.dll"
#r @"....\System.Data.Linq.dll"

open System
open FSharp.Data.Sql
open FSharp.Data.Sql.Common
open System.Data.Linq

type SeriesResult = { .. fields .. }

[<Literal>]
let ConnectionString = @"connStr"

type Sql = SqlDataProvider<
                    ConnectionString = ConnectionString,
                    DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER>

let db = Sql.GetDataContext()

let test = 
    [
        for f in db.Procedures.MyStoredProcedure.Invoke("param").ResultSet do
            yield f.MapTo<SeriesResult>()
    ]