F#错误FS3033不支持DbType'结构化'

时间:2015-08-27 16:12:16

标签: sql-server f# database-connection dbcontext dbtype

我正在尝试在F#中查询我们的数据库,但是当我获得数据上下文时,我遇到了很多错误。 这是我的连接命令:

#r "System.Data.dll"
#r "FSharp.Data.TypeProviders.dll"
#r "System.Data.Linq.dll"

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

type dbSchema = SqlDataConnection<"Data Source=OCPM;Initial Catalog=Nautilus;Integrated Security=SSPI;">
let db = dbSchema.GetDataContext()

在这个简单的脚本之后返回总共147个错误,我不会列出所有错误,但这里有几个例子:

  •   

    Script1.fsx(11,17):错误FS3033:类型提供者
      &#39; Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders&#39;
      报告错误:读取架构时出错。警告:SQM1025:无法执行   提取存储过程'utvf_VehiclesSummaryUDT&#39;来自SqlServer,因为参数&#39;事件&#39;是不受支持的DbType&#39; Structured&#39;。

  •   

    Script1.fsx(11,17):错误FS3033:类型提供者
      &#39; Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders&#39;
      报告错误:读取架构时出错。警告:SQM1014:无法执行   提取存储过程&#39; asynch.usp_LBNGBasket&#39;来自SqlServer   无效的对象名称&#39;#updatedPriceTab&#39;。

我认为这是由于我们的数据库中使用的对象和结构的复杂性。第一个错误是由函数udt_IncidentExposure中名为utvf_VehiclesSummaryUDT的用户定义表类型引起的。第二个是因为临时表#updatedPriceTabasynch.usp_LBNGBasket中调用,但在另一个存储过程中创建。

我很惊讶F#和SQL Server在复杂结构上的兼容性有限。有没有其他方法可以连接到F#中的SQL服务器?我只需要做非常简单的SQL查询。

其他信息:正在使用的SQL Server版本为10.50.4270

2 个答案:

答案 0 :(得分:1)

您使用生产质量SqlClient type provider是不合时宜的,因为它至少需要SQL2012才能运行。

您可以尝试SQL Type Provider,但我没有在制作方案中使用它的经验。

此外,您可以尝试使用SqlEntityConnection type provider,有时比您尝试过的SqlDataConnection类型提供商做得更好。

最后,作为最后的手段,没有什么能阻止你通过普通的ADO.NET从F#访问SQL。

答案 1 :(得分:0)

您可以从此处尝试其他F#类型的提供商: http://fsharp.org/guides/data-access/#sql-data-access

MS SQL Server的最佳(IMO)是FSharp.Data.SqlClient,但我相信它仅支持2012及以上版本。