Web.config或App.config中数据库链接路径的问题
2013-05-03 16:26
113 查看
以前做ASP.net WEB开发时Web.config中数据库链接都是配置链接到服务器的SQL SERVER上的,也做过几个小的项目是用SQLite数据库文件内置的。现在在做一个Winform的项目,也用SQLite数据库文件内置,在配置App.config时完全按Web用SQlite时的配置方法。后面出现了保存数据到数据库时,报“No such table”的错误信息,后经检查原因是数据库没有连接上。把App.config数据库连接语句<connectionStrings>
<clear/>
<add name="SQLiteDbConnection" connectionString="Data Source=|DataDirectory|Calculation.db;Version=3;BinaryGUID=False" providerName="System.Data.SQLite"/>
</connectionStrings>中的“|DataDirectory|Calculation.db”改为完全绝对路径(E:\开发项目\演算器项目\Calculation\App_Data\Calculation.db)后,问题解决了。但是考虑到项目的移植性,不可能用绝对路径的。后下面就找动态相对路径的方法,看了好多资料后发现Windows应用项目中不支持特殊的文件夹App_Data。但是为了方便或习惯,还是想用。于是自己建,还叫App_Data。运行发现数据库连不上,从错误信息中来看,原来Winform把|DataDirectory|解析到了程序启动目录apppath\bin\debug(或release),后面不带App_Data!而WEB中|DataDirectory|是解析到目录程序的App_Data文件夹下的。折腾了半天终于搞明白原因了。那我在apppath\bin\debug文件夹下建立App_Data文件夹,在里面放置数据库文件。这样的话一切OK但是后面发现数据保存不成功,最后在网上找了一个方法问题总算解决了。方法如下:
string p = AppDomain.CurrentDomain.BaseDirectory;
if (p.IndexOf("\\bin\\") > 0)
{
if (p.EndsWith("\\bin\\Debug\\"))
p = p.Replace("\\bin\\Debug", "");
if (p.EndsWith("\\bin\\Release\\"))
p = p.Replace("\\bin\\Release", "");
}
if (!p.EndsWith("App_Data\\"))
p = p + "App_Data\\";
AppDomain.CurrentDomain.SetData("DataDirectory", p);
思想就是去掉调试期间和生产期间的不同,这样要注意的是,发布程序的时候,数据库也要放到App_Data目录下面。
<clear/>
<add name="SQLiteDbConnection" connectionString="Data Source=|DataDirectory|Calculation.db;Version=3;BinaryGUID=False" providerName="System.Data.SQLite"/>
</connectionStrings>中的“|DataDirectory|Calculation.db”改为完全绝对路径(E:\开发项目\演算器项目\Calculation\App_Data\Calculation.db)后,问题解决了。但是考虑到项目的移植性,不可能用绝对路径的。后下面就找动态相对路径的方法,看了好多资料后发现Windows应用项目中不支持特殊的文件夹App_Data。但是为了方便或习惯,还是想用。于是自己建,还叫App_Data。运行发现数据库连不上,从错误信息中来看,原来Winform把|DataDirectory|解析到了程序启动目录apppath\bin\debug(或release),后面不带App_Data!而WEB中|DataDirectory|是解析到目录程序的App_Data文件夹下的。折腾了半天终于搞明白原因了。那我在apppath\bin\debug文件夹下建立App_Data文件夹,在里面放置数据库文件。这样的话一切OK但是后面发现数据保存不成功,最后在网上找了一个方法问题总算解决了。方法如下:
string p = AppDomain.CurrentDomain.BaseDirectory;
if (p.IndexOf("\\bin\\") > 0)
{
if (p.EndsWith("\\bin\\Debug\\"))
p = p.Replace("\\bin\\Debug", "");
if (p.EndsWith("\\bin\\Release\\"))
p = p.Replace("\\bin\\Release", "");
}
if (!p.EndsWith("App_Data\\"))
p = p + "App_Data\\";
AppDomain.CurrentDomain.SetData("DataDirectory", p);
思想就是去掉调试期间和生产期间的不同,这样要注意的是,发布程序的时候,数据库也要放到App_Data目录下面。
相关文章推荐
- |DataDirectory|解决web.config或app.config数据库连接的相对路径问题
- web.config或App.config中AttachDBFilenamex相对路径问题
- vs2008中webconfig中链接数据库配置小问题
- |DataDirectory|解决webconfig数据库连接的相对路径问题
- 关于web.config的数据库连接的相对路径的问题
- app.config或web.config存放数据库连接字符串的两种方式
- app.config的读写、更新问题 两篇链接
- 数据库链接出错,请检查数据库路径是否正确--这个问题搞了一下午
- 在类项目中读取asp.net中的web.config数据库链接
- asp.net mvc开发中,web.config文件如何配置数据库链接
- C# web 链接数据库问题二三 (二)
- ASP.NET 链接 Access 数据库路径问题最终解决方案
- 数据库连接配置 app.config web.config
- web.config配置文件链接数据库的方法
- 通过APP.CONFIG读取链接数据库字符串
- ASP.NET 链接 Access 数据库路径问题最终解决方案
- web.config数据库相对路径设置方法
- C# web 链接数据库问题二三(一)
- ASP.NET 链接 Access 数据库路径问题最终解决方案
- 将数据库的链接字符串分离到web.config之外的的database.config文件中