如何使用 F# 中的类型提供程序连接到 SQL Server Compact Edition 4.0?

Posted

技术标签:

【中文标题】如何使用 F# 中的类型提供程序连接到 SQL Server Compact Edition 4.0?【英文标题】:How to connect to SQL Server Compact Edition 4.0 with a type provider in F#? 【发布时间】:2012-04-14 15:36:14 【问题描述】:

我正在尝试从 F# 连接到 SQL Server Compact Edition 数据库,并尝试使用类型提供程序。这是在 Visual Studio 11 Beta 中,所以我意识到可能会因此出现问题,但我认为更有可能是我还没有专业知识。

但是,我注意到 Microsoft.FSharp.Data.TypeProviders 中没有特定于 CE 的类型提供程序,并且我不确定常规的 SqlDataConnection 是否可以解决问题,所以这可能就是问题所在。

但是,当我尝试创建连接时,IDE 似乎至少可以识别出我正在尝试访问 CE 数据库。

所以,我有以下代码:

type SqlConnection = 
  Microsoft.FSharp.Data.TypeProviders
    .SqlDataConnection<ConnectionString = @"Data Source=C:\\Path\\Database.sdf">
let db = SqlConnection.GetDataContext()

所以它是相当标准的,或多或少直接来自使用类型提供程序项菜单添加新的 LINQ to SQL。

我通过连接字符串得到的工具提示是“未安装提供程序'System.Data.SqlServerCe.3.5'。”看起来似乎表明没有安装 Sql Server CE 是一个问题,但是我有库,能够使用常规 SqlCEConnection 连接到数据库并运行 SqlCeCommands 等。由于它是 4.0 而不是 3.5,我不确定它是否在寻找错误的提供者。我在 VS 11 beta 中创建了数据库,所以我认为所有版本都应该匹配等等。

简而言之,我想知道我是否做错了什么,或者 VS11 beta 类型的提供程序库是否还不支持 CE 4.0,或者我需要做些什么来实现它。

谢谢!

【问题讨论】:

【参考方案1】:

这个“在我的机器上工作”(使用 VS 11 测试版,实体框架,基于此处的演练,http://msdn.microsoft.com/en-us/library/hh361038(v=vs.110).aspx:

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

let connectionString = "metadata=res://*/;provider=System.Data.SqlServerCe.4.0;provider connection string='data source=C:\\Data\\SQLCE\\Test\\nw40.sdf';"

type internal edmx = EdmxFile<"NWModel.edmx", ResolutionFolder = @"C:\Users\erik.COMMENTOR\Documents\Visual Studio 11\Projects\TestSqlCeFSharp">

let internal context = new edmx.nw40Model.nw40Entities(connectionString)

query  for supplier in context.Suppliers do
        select supplier 
|> Seq.iter (fun supplier -> printfn "%s" supplier.Company_Name)

添加了对以下内容的引用: FSharp.Data.TypeProviders, 系统.数据.实体, System.Data.Linq

【讨论】:

直到今天才有机会测试。这是一个巨大的帮助,所以谢谢!我还发现,至少对于这里的简单示例,没有必要包含 System.Data.EntityClient。更紧凑的查询语法也是只做 context.Suppliers |> Seq.iter... 等。【参考方案2】:
Supported info of 'System.Data.SqlServerCe.4.0' in  Microsoft.FSharp.Data.TypeProviders
1.SqlDataConnection is not
2.DbmlFile is partial
    type dbml = DbmlFile<_>
    use cn = new SqlCeConnection(...)
    use db = new dbml.DbContext(cn)
3.EdmxFile is full
4.SqlEntityConnection is full

【讨论】:

所以我想这意味着有很多功能,但是还没有建立数据连接?我对类型提供程序完全陌生,对 LINQ to SQL 也很陌生(对 LINQ 有一般经验)。

以上是关于如何使用 F# 中的类型提供程序连接到 SQL Server Compact Edition 4.0?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用连接字符串从 Winform 应用程序连接到 Godaddy 中的 SQL Server 数据库

如何在 PL/SQL 中连接到另一个用户

通过sql server express将Android应用程序连接到sql server

连接到 SQL Server

如何将 youwave 连接到本地 sql 数据库 [关闭]

如何将 PHP 连接到 SQL Server?