天道酬勤,学无止境

SQL Server Compact 'Data Directory' macro in Connection String - more info needed

So, as described on this msdn page, when you define a Connection String for SQL Server Compact 3.5, you can use the "Data Directory" macro, like this:

quote from this msdn page:

Data Directory Support
SQL Server Compact 3.5 now supports the Data Directory macro. This means that if you add the string |DataDirectory| (enclosed in pipe symbols) to a file path, it will resolve to the path of the database.

For example, consider the connection string:

"Data Source= c:\program files\MyApp\Mydb.sdf"

When using Data Directory, you can instead use the following connection string:

"Data Source = |DataDirectory|\Mydb.sdf"

For more information, see How to: Deploy a SQL Server Compact 3.5 Database with an Application.

However, the 'for more information' link on msdn doesn't actually give any more information.

So my question is:

How does the |Data Directory| macro translate at run time? For WinForm apps, it seems to just give the location of the executable. Or is it more complicated than that?

评论

To set the DataDirectory property, call the AppDomain.SetData method. If you do not set the DataDirectory property, the following default rules will be applied to access the database folder:

  • For applications that are put in a folder on the user's computer, the database folder uses the application folder.
  • For applications that are running under ClickOnce, the database folder uses the specific data folder that is created.

Please review this link: http://msdn.microsoft.com/en-us/library/aa478948.aspx

The |DataDirectory| portion of the connection string specifies that the MDF file is located in the App_Data directory.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • SQL Compact 2008 连接字符串问题(SQL Compact 2008 Connection String Problem)
    问题 我有以下代码可以连接到 2008 年的 sql server 精简版: private SqlConnection sqlConn; public void createConnection() { String connectionString = @"Data Source=C:\Projects\somefile.sdf;Persist Security Info=False"; sqlConn = new SqlConnection(connectionString); sqlConn.Open(); } 但是,在执行sqlConn.Open()时,我不断收到以下错误: “建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者: SQL 网络接口,错误:26 - 定位服务器/指定实例时出错)” 有没有人有任何想法可能是什么问题? 我可以在数据库资源管理器中创建到数据库的连接,但它似乎在代码中不起作用。 回答1 System.Data.SqlClient的Sql*类只能用于连接到常规 SQL Server 实例。 要连接到 SQL CE 数据库,您需要在System.Data.SqlServerCe.dll创建一个 SqlCeConnection
  • 无法使SQL Server Compact 3.5 / 4与ASP.NET MVC 2一起使用(Can't get sql server compact 3.5 / 4 to work with ASP .NET MVC 2)
    问题 我正在使用Visual Studio 2008 Pro。 我可能在这里遗漏了一些非常明显的东西,但是我一直在尝试使Sql Server Compact 4的CTP在我的asp.net mvc应用程序中工作。 我几乎找不到关于如何设置它或正在运行的示例应用程序的说明。 我的目标是私人安装,因此我可以将其包含在我的Web应用程序中,而不必在我的域托管上进行sql server设置。 实际上,这只是我拍摄微风并试图弄清楚这一点。 我不打算以此托管市场或其他任何东西。 因此,我已将在基本4.0方向(c:\ Program Files \ Sql Server compact \ v4.0)上安装的所有dll复制到了应用程序中的lib文件夹中。 我已将“复制到输出方向”选项设置为“如果较新则复制”。 然后,我引用System.Data.SqlServerCE dll并将“复制本地”设置为True。 我通过Sql Studio Express创建了一个sdf文件。 重要说明是,我没有看到用于创建此文件的CE 4.0版本的选项,因此它是使用CE 3.5创建的。 我创建了一些表,在这些表中添加了几行,然后将* .sdf文件复制到我的App_Data目录中。 值得一提的是,从VS 2008内部开始,此文件从未出现在我的项目中,但确实存在于App_Data目录的物理位置。 我不确定为什么会这样。
  • 将 C# 连接到 SQL Server Compact 数据库(Connecting C# to SQL Server Compact database)
    问题 嗨,我正在尝试将 SQL 服务器紧凑型数据库连接到我的程序,我想要一个按钮来删除数据库中的所有条目,当我按下所述按钮时,程序抛出异常并给出以下错误消息“与网络相关或与 SQL Server 建立连接时发生特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:SQL 网络接口,错误: 26 - 定位服务器/指定实例时出错)” 请帮忙? =] 对不起,代码在下面=] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.Data.SqlServerCe; namespace Booking_system_Final { public partial class PendingJobs : Form { SqlConnection sc = new SqlConnection("Data Source=C:\
  • 使用数据库打包 C# 应用程序(Packaging a C# application with a database)
    问题 我打包了一个使用数据库的 WPF C# 应用程序。 但是,当我安装打包的应用程序时,它使用的是我在开始时通过 Visual Studio (.mdf) 创建的数据库,而不是创建另一个数据库。 打包应用程序的全部目的是让我可以在其他计算机上共享它,所以我安装了它,我需要它来为该应用程序实例创建一个新数据库。 有没有办法做到这一点? 我需要设置一个属性来说明数据库是本地实例吗? 或者强制包在安装时创建一个新的包? 任何帮助将非常感激。 谢谢。 回答1 我自己刚刚在做这件事,我建议的一件事是使用 SQL Compact Edition 使该过程变得容易得多,但是如果目前过程中为时已晚,则坚持使用当前数据库,但是我不知道如果以下方法适用于 MDF 文件。 您如何在客户端计算机上部署应用程序? 用户机器是否安装了sql? 您需要做的第一件事是转到 MDF 的属性,并确保将复制到输出目录设置为复制(如果较新,则构建操作设置为内容)。 如果您使用安装项目来安装应用程序,那么您需要确保在项目、应用程序属性、发布、应用程序文件中,您的 mdf 位于列表中,并设置为数据文件自动、必需和包含。 并右键单击安装程序文件系统中的“应用程序文件夹”,然后添加,项目输出,文件内容 最后更改代码中的连接字符串,使其读取 using ( SqlCeConnection sqlCon = new
  • 如何从 SQL Server Compact 导出数据以访问 MDB(How to Export Data from SQL server Compact To Access MDB)
    问题 我需要一个解决方案来将所有数据从 SQL Server CE 传输到 Access mdb 数据库。 我尝试了这种方法 http://www.codeproject.com/Answers/483989/HowplustoplusExportplusSQLplusTablesplusToplusAcce#answer2(解决方案 #2),但收到错误“连接字符串或 IN 子句中未指定数据库”。 如果我连接到非紧凑型 SQL 服务器,则该代码有效。 我想问题在于 IN 子句中的连接字符串,但我不知道如何更改它。 这是我的代码: private void ExportTable(string tableName, string source, string destination) { var connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", destination); var cmdText = string.Format("SELECT * INTO {0} FROM [{0}] IN ''[Data Source={1};Max Database Size='4000';Persist Security Info=False;];", tableName, source)
  • Connection string for using SQL Server Compact with Entity Framework?
    I'm done trying to Google for this. I have installed SQL Server CE 4.0, and have EF 4.1, but I can't get a proper connection string. Nothing on connectionstrings.com applies to me. I just want to create a SqlCeEngine object, but no matter what I try I get some exception. Most recently it's been Unknown connection option in connection string with either "metadata", "app", "provider", or "provider connection string" after it. I know EF requires metadata in the connection string. And I can't imagine how anything could do without "provider connection string". So far I have this: <add name=
  • How to Export Data from SQL server Compact To Access MDB
    I need a solution to transfer all data from SQL Server CE to Access mdb database. I tried this approach http://www.codeproject.com/Answers/483989/HowplustoplusExportplusSQLplusTablesplusToplusAcce#answer2 (solution # 2) but getting an error "No database specified in connection string or IN clause." The code works if I connect to non-compact SQL server. I guess the problem is with connection string in IN clause but I cannot figure out how to change it. Here is my code: private void ExportTable(string tableName, string source, string destination) { var connStr = string.Format("Provider=Microsoft
  • 如何使用 F# 中的类型提供程序连接到 SQL Server Compact Edition 4.0?(How to connect to SQL Server Compact Edition 4.0 with a type provider in F#?)
    问题 我正在尝试从 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 是一个问题
  • 如何在 ASP.NET 中连接到 SQL Server Compact 4.0?(How connect to SQL Server Compact 4.0 in ASP.NET?)
    问题 我想在我的 ASP.NET 应用程序中连接到 SQL Server Compact 4.0。 下面是代码示例: protected void Page_Load(object sender, EventArgs e) { string connStr = "Data Source=D:\\MyDB.sdf;"; string sqlStr = "select * from tblMyTable"; var sqlDataSrc = new SqlDataSource(connStr, sqlStr); GridWithUrls.DataSource = sqlDataSrc; GridWithUrls.DataBind(); } 但我有下一个错误:“建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。验证实例名称是否正确,并且 SQL Server 已配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)” SqlDataSource 具有带有三个参数的构造函数,其中之一是“providerName”,那么如何指定我肯定要使用 Sql Server Compact 提供程序? 我还添加了 System.Data.SqlServerCe 参考.. 回答1 尝试: providerName =
  • Should I call "SqlCeEngine.Upgrade()" when both the SDF file and the device are seemingly the same version (2)?
    This is a followup to a question here ctacke said there regarding SQL Server CE-related "issues" I was/am having: "The problem, as indicated by the error text, is that the SDF file was created by a version of SQL Compact that doesn't match the version of SQL Compact that the application is referencing. I wouldn't focus on the reported version numbers, just the fact that it knows there's a mismatch. If you don't know the version of the SDF, you can always look it up by reading a few bytes from the SDF file. SQL Compact database files aren't 100% transportable. You definitely cannot take an SDF
  • 当 SDF 文件和设备看似相同的版本 (2) 时,我应该调用“SqlCeEngine.Upgrade()”吗?(Should I call "SqlCeEngine.Upgrade()" when both the SDF file and the device are seemingly the same version (2)?)
    问题
  • Connection to Read-only embedded SQL Server compact edition (.sdf file) in WPF application
    I am looking for a solution to the following: Find a properly formatted connection string to SQL server compact edition file (.sdf) used as embedded resource, containing reference (i.e. read-only) data in WPF application. Note: please pay attention to the operative words [Build Action] set to "Embedded Resource" and "Do Not Copy" to the output directory settings. It means that the file will not be physically copied to the target computer as a stand-alone entity, but instead is embedded in app executable. So far I have tested a solution that allows getting the .sdf file from embedded resource
  • 在 WPF 应用程序中连接到只读嵌入式 SQL Server 精简版(.sdf 文件)(Connection to Read-only embedded SQL Server compact edition (.sdf file) in WPF application)
    问题
  • SQL Server Compact 错误:无法加载 DLL 'sqlceme35.dll'。 指定的模块无法找到(SQL Server Compact error: Unable to load DLL 'sqlceme35.dll'. The specified module could not be found)
    问题 我正在使用 Visual Studio 2008 C# 开发 Windows 窗体应用程序,该应用程序在客户端使用 SQL Server Compact 3.5 数据库。 客户端很可能是 32 位 Windows XP 或 Windows Vista 机器。 我正在使用一个标准的 Windows Installer 项目,该项目创建一个 MSI 文件和 setup.exe 来在客户端计算机上安装该应用程序。 我是 SQL Server Compact 的新手,所以我以前不必像这样分发客户端数据库。 当我运行 setup.exe(在新的 Windows XP 32 位 SP2 和 Internet Explorer 7 上)时,它安装正常,但是当我运行该应用程序时,我收到此错误: 无法加载 DLL 'sqlceme35.dll'。 指定的模块无法找到 我已经花了几个小时来搜索这个错误,但我能找到的只是与在 64 位 Windows 上安装有关的问题,而没有与我正在使用的普通 32 位有关的问题。 安装应用程序将它找到的所有相关文件复制到指定的安装目录中,包括System.Data.SqlServerCe.dll文件(程序集版本 3.5.1.0)。 数据库文件位于应用程序目录外名为“data”的目录中,其连接字符串为 <add name="Tickets.ieOutlet
  • SQL Server Compact error: Unable to load DLL 'sqlceme35.dll'. The specified module could not be found
    I'm developing a Windows Forms application using Visual Studio 2008 C# that uses an SQL Server Compact 3.5 database on the client. The client will most likely be 32 bit Windows XP or Windows Vista machines. I'm using a standard Windows Installer project that creates an MSI file and setup.exe to install the application on a client machine. I'm new to SQL Server Compact, so I haven't had to distribute a client database like this before now. When I run the setup.exe (on new Windows XP 32 bit with SP2 and Internet Explorer 7) it installs fine, but when I run the application I get this error
  • SqlCeConnection 期望它的连接字符串 arg 采用什么格式?(In what format does SqlCeConnection expect its connection string arg?)
    问题 我有一个失败的 SqlCeConnection.Open() 调用。 我得到的异常消息非常通用:“System.Data.SqlserverCe.SqlCeException”(比漂亮更通用) 相关代码是: private DBConnection() { try { string conStr = "Data Source = " + filename; string cmpStr = conStr + ".tmp"; if (File.Exists(filename+".tmp")) File.Delete(filename+".tmp"); engine = new SqlCeEngine(conStr); if (File.Exists(filename)) { } else { engine.CreateDatabase(); } engine.Dispose(); objCon = new SqlCeConnection(conStr); //MessageBox.Show(string.Format("conStr == {0}", conStr)); objCon.Open(); // <= This is where all Dallas breaks loose; conStr is "DataSource = \My Documents\NRPSDB
  • 使用Seata彻底解决Spring Cloud中的分布式事务问题
    文末有礼物送给大家! 摘要 Seata是Alibaba开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务,本文将通过一个简单的下单业务场景来对其用法进行详细介绍。 什么是分布式事务问题? 单体应用 单体应用中,一个业务操作需要调用三个模块完成,此时数据的一致性由本地事务来保证。 微服务应用 随着业务需求的变化,单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。 小结 在微服务架构中由于全局数据一致性没法保证产生的问题就是分布式事务问题。简单来说,一次业务操作需要操作多个数据源或需要进行远程调用,就会产生分布式事务问题。 Seata简介 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata原理和设计 定义一个分布式事务 我们可以把一个分布式事务理解成一个包含了若干分支事务的全局事务,全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚。此外,通常分支事务本身就是一个满足ACID的本地事务。这是我们对分布式事务结构的基本认识,与 XA
  • 带有数据库的 C# Windows 窗体应用程序未在客户端系统上运行(C# Windows Form Application with Database not running on Client's System)
    问题
  • 何时使用 .mdf,何时使用 .sdf?(When to use .mdf and when .sdf?)
    问题 在互联网上看到很多东西后,我没有找到两种文件类型之间的任何解释: .mdf和.sdf 。 我相信.sdf将是 SQL Server ( .mdf ) 的紧凑版本。 尽管如此,它们看起来完全不同。 遵循了msdn上的两个教程,即MVC Movie App和Musicstore。 两者都使用.sdf 。 部分引用(完整):'首先它应该是“|DataDirectory|ASPNETDBContext.mdf”(注意扩展名差异)。 你的申请……” 两个教程都有到.sdf的连接字符串,即: <add name ="MovieDBContext" connectionString ="Data Source=|DataDirectory|Movies.sdf" providerName ="System.Data.SqlServerCe.4.0" /> <add name ="MusicStoreEntities" connectionString ="Data Source=|DataDirectory|MvcMusicStore.sdf" providerName ="System.Data.SqlServerCe.4.0" /> 题: 我的问题是在何时何地使用什么? 更多关于为什么使用which where。 回答1 SQL Server Compact(sdf 文件)在
  • 如何具体检查SQL数据库是否已经打开? - VB.NET 2012 MVC 4(How to Specifically Check if the SQL Database Has Gotten Opened? - VB.NET 2012 MVC 4)
    问题 Function SQLSelect() As ActionResult Dim theconnection As New SqlConnection("Data Source=(localdb);Database=test_drive_database;") Dim queryString As String = "SELECT * FROM ColorTable" Dim command As New SqlCommand(queryString) command.CommandTimeout = 15 command.CommandType = CommandType.Text 'Printing Out the SQL Result Return ViewData("command") End Function 我有一个空的 SQL 结果,没有错误消息。 调用上述函数的 URL 为: http://localhost:1812/Home/SQLSelect 问题是,有没有办法专门检查SQL数据库是否已打开? 使用的工具: Visual Studio 2012、VB.NET MVC 4、Microsoft SQL Server Compact 4.0 注意:数据库名为test_drive_database ,数据库没有设置密码。 回答1 您的代码中似乎有一些错误