Ado.net2.0中新增加了一个MagicValue,可以在应用程序的配置文件的数据库链接串种使用DataDirectory ,例如
<connectionStrings>
<add name="ConnectionString" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|data.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
原来一直使用ASP.net开发web应用,asp.net 2.0特有几个特殊的文件夹App_Data就是其中一个,web应用的数据库大可以放在这个下面,一直工作的很好。......知道有一天开始写winform的程序,^_^,当然也想享受这种方便啦,可是发现Windows应用项目中不支持特殊的文件夹,根本没有这种东西!没关系咱自己建,还叫App_Data,运行发现数据库连不上,从错误信息中来看,原来Winform中把|DataDirectory|翻译成了程序启动目录apppath\bin\debug(或release),后面不带App_Data!数据库文件倒是自动复制倒了运行目录下(带着App_Data的目录)没关系,咱自己加上,把上面的链接串改成这样
<connectionStrings>
<add name="ConnectionString" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|App_Data\data.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
一运行,哈哈,链接成功了。试着录入几个数据,保存,ok没问题!退出,再运行,一看傻眼了,刚才录入的数据不见了!研究半天明白了,原来每次运行,.net都自动复制了一份数据库到运行目录,所以上次的数据就都丢失了!想到两个解决办法,1,把数据库的属性中的“复制到输出目录”设置为“不复制”,这样Debug和Release编译版本各用各的数据库,原始的数据库始终是空的!(好像也有用)2,链接到程序目录中的App_Data下的数据库。由于对第一种解决办法,自我感觉有点儿迷惑和Webform中的经验不一致,所以决定用第二种,Google了一下,有位我不认识的老外^_^给出了解决办法http://blogs.msdn.com/dataaccess/archive/2005/10/28/486273.aspx,就是在程序启动时,设置AppDomain.CurrentDomain.setData(“DataDirectory”,我的目录字符串);Winform的程序那当然是在Main函数中了,废话不说了,我的代码如下
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目录下面。
感谢:http://www.cnblogs.com/dajianshi/archive/2007/07/06/808495.html
http://www.rupeng.com/forum/thread-11988-1-1.html
分享到:
相关推荐
C#-实验四--WinForm程序设计.doc
基于SerialPort控件的C++.Net串口通信-单片机开关量输入winform程序
基于SerialPort控件的C++.Net串口通信-单片机开关量输出winform程序
三次架构典范项目-图书管理系统(winform应用程序),附带sqlserver 2008数据库脚本。 个人分享,请勿作为商业用途!
这是一个运行在Windows系统上的WinForm的桌面程序,截图识别工具,OCR识别文字项目源码,使用Visual Studio 开发工具打开修改,C#语言编程,直接编译正常运行,请放心下载,以下还有... 想要定制电脑桌面程序截图...
winform-一本基础的winform入学教程,简单易学,实用
c#socket-udp通信聊天winform程序 123
S2试题2006-10-22(winform).rar
这是一个可以定时自动删除指定文件夹下文件的Winform应用程序,该程序只适用Windows系统环境,使用.net3.5框架开发,主要包含如下功能: ①可以选择需要删除文件的文件夹(或者直接复制需删除的文件夹路径) ①可以...
The-windows-Deploys-Winform-Cshap-project Take Cshap as an example, write the program window, running the IDE must be Visual Studio 2022 IDE, and the user controls need to be added themselves. 以C#为...
用winform作的文件操作程序,适合初学者入门学习,主要功能有:创建文件,删除文件,复制文件等等以及目录操作,文件的写入,读取,还有二进制文件的操作
管理系统系列--使用c#写的winform酒店管理系统,功能基本完善
本软件的主要功能是,以C#.NET WINFORM 开发一个固定的客户端,然后以HTTP+XML的方式与SAP进行数据交互,用户和权限管理都在SAP中实现,WINFORM中的报表导航清单、报表输出和输入帮助都根据在SAP中配置的数据动态...
C# WinForm-UML类图程序,绘制UML程序-2023(绘制uml类图,保存,打开文件等等)
在WinForm程序中调用WebService 在WinForm程序中调用WebService 在WinForm程序中调用WebService
在WinForm程序中,webBrowser显示页面使用谷歌内核。避免了网页在WinForm中显示兼容性问题。
采用winform开发的下载文件的功能,使用WebClient中的DownloadFile方法
S2试题2006-09-17(winform).rar
C#操作excel 打开-读取-修改-保存 winform入门操作 适合入门读者
使用C#语言 winform开发的仓库管理系统内部使用Dev2018.1第三方控件,内带sqlserver数据库文件。