我有一个Windows CE表单(NETCF 3.5)应用程序,我通过Visual Studio 2008(c#)创建 - (但是,我的问题的核心可能也适用于普通的Windows应用程序)。
该应用程序实现了我放置在项目中的SQLite数据库 - 即数据库位置位于项目的子目录中。因此,数据库的连接字符串如下所示:
@"Data Source = C:\src\myApp\data\mydb.s3db"
与数据库的连接很好并且有效。
创建数据库后,我通过VS2008的“数据源配置向导”添加了数据集(在VS2008中,转到数据>添加新数据源...)。该向导允许我们创建与现有数据库的连接,然后从该数据库中选择将在向导即将创建的数据集中使用的表。
因此,向导可以很好地创建数据集,允许我们对其进行编程。我遇到的问题是当我将应用程序部署到我的WinCE设备时。
我遇到的问题是当应用程序在需要用数据填充数据集时尝试访问数据库。
问题的根源是,数据集中定义的数据库的连接字符串是dev机器 - 而不是WinCE设备的本地路径。
例如:数据集中的连接字符串设置为
@"Data Source = C:\src\myApp\data\mydb.s3db"
而不是目标设备的完整路径,类似于
@“数据源= \ Program Files \ myApp \ data \ mydb.s3db”
我能够通过手动编辑数据集的.Designer.cs文件(在InitConnection()方法中)来解决问题。但是,如果VS2008能以某种方式为我管理连接字符串会很好 - 即在开发模式下,连接字符串指向我的开发机器上的数据库。处于部署模式时,连接字符串指向设备上的数据库。
有没有办法指定连接字符串指向相对路径而不是完整路径?或?
答案 0 :(得分:2)
使用“| DataDirectory |”在您的连接字符串中。
引自http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/dc31ea59-5718-49b6-9f1f-7039da425296/ ...
| DataDirectory目录| (用管道符号括起来)是一个替换字符串,表示数据库的路径。它消除了对完整路径进行硬编码的需要,这导致了几个问题,因为数据库的完整路径可以在不同的地方序列化。 DataDirectory还可以轻松共享项目以及部署应用程序。
例如,不要使用以下连接字符串: “数据源= c:\ program files \ MyApp \ Mydb.sdf”
使用DataDirectory,您可以拥有以下连接字符串: “数据源= | DataDirectory | \ Mydb.sdf”
要设置DataDirectory属性,请调用AppDomain.SetData方法。如果未设置DataDirectory属性,则将应用以下默认规则来访问数据库文件夹: