`
啸笑天
  • 浏览: 3461272 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

使用DataDirectory---WinForm程序中两份mdf文件问题的解决

    博客分类:
  • .NET
阅读更多

 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编程资料

    C#-实验四--WinForm程序设计.doc

    S2试题2006-10-22(winform).rar

    通过这份资料,学员可以了解和练习如何使用.NET Framework中的WinForm工具箱来设计用户界面,如何使用控件如按钮、文本框、标签等,以及如何处理用户交互和数据操作。此外,还会涉及如窗体事件处理、布局管理、数据...

    redis-c#-web_winform解决方案集合.zip

    这个"redis-c#-web_winform解决方案集合.zip"包含两个项目:RedisStudyweb和RedisStudywinform,分别针对WebForm和WinForm应用。 RedisStudyweb项目可能是一个.NET Web应用程序,它演示了如何在ASP.NET WebForm环境...

    C# 《WinForm程序设计与实践》 4.1 winform简介

    C# WinForm 程序设计与实践 - 4.1 WinForm 简介 WinForm 是一种基于 Windows 的图形用户界面(GUI)开发平台,使用 C# 语言进行编程。WinForm 程序的核心是窗体(Form),窗体是用户与程序之间的交互接口。 4.1.1...

    Gets-the-time-of-Beijing.zip_winform

    总结起来,这个"Gets-the-time-of-Beijing.zip_winform"项目是一个使用WinForm技术的.NET应用程序,它通过网络获取XML文件来得到北京的准确时间,然后在用户界面上显示。这个过程涉及到网络编程、XML解析、时区转换...

    winform作的文件操作学习程序

    在本文中,我们将深入探讨如何使用C#编程语言和Windows Forms(WinForm)框架来创建一个文件操作学习程序。这个程序对于初学者来说是一个很好的起点,因为它涵盖了基础的文件和目录管理功能,如创建、删除、复制文件...

    WinForm程序设计与实践第4章.pptx

    WinForm程序可以使用Visual Studio 2015中的“文件”→“新建”→“项目”菜单栏中的“WINDOWS窗体应用程序”选项创建。新建的项目文件结构包括Form1.cs、Form1.Designer.cs、Program.cs等文件。 4.1.1 WinForm程序...

    三层架构典范项目-图书管理系统(winform应用程序)

    【三层架构典范项目-图书管理系统】是一个基于Winform应用程序的示例,展示了如何在IT行业中构建高效、可维护且分层的软件系统。这个系统利用了三层架构的设计原则,将业务逻辑、数据访问以及用户界面这三个核心部分...

    基于SerialPort控件的C++.Net串口通信-单片机开关量输入winform程序

    在本文中,我们将深入探讨如何使用C++.NET和SerialPort控件进行串口通信,以实现与单片机之间的开关量输入。串口通信是一种基本的计算机与硬件设备间的数据交换方式,尤其在嵌入式系统和单片机编程中应用广泛。...

    C#通过winform和http上传文件

    在C#编程环境中,开发Windows桌面应用程序时,WinForm是一个常用的选择。而通过HTTP协议进行文件上传是网络应用中的常见需求。本知识点将详细介绍如何利用C#的WinForm界面和HTTP协议来实现文件上传功能。 首先,...

    winform-一本基础的winform入学教程

    本教程“Winform-一本基础的Winform入学教程”旨在帮助初学者快速入门,掌握WinForm开发的基础知识。 在WinForm开发中,你需要了解以下关键概念: 1. **窗体(Form)**:窗体是WinForm应用程序的基本组成部分,它...

    C#开发的WinForm---SQLite加密程序

    在本文中,我们将深入探讨如何使用C#进行WinForm应用程序开发,特别关注如何构建一个SQLite加密程序。SQLite是一个轻量级、开源的关系型数据库,它被广泛用于桌面应用和嵌入式系统,因为它无需服务器进程即可运行。...

    截图识别工具-OCR识别文字-WinForm-电脑桌面程序项目源码

    这是一个运行在Windows系统上的WinForm的桌面程序,截图识别工具,OCR识别文字项目源码,使用Visual Studio 开发工具打开修改,C#语言编程,直接编译正常运行,请放心下载,以下还有... 想要定制电脑桌面程序截图...

    将winform应用程序打包成exe文件

    将一个WinForm应用程序打包成一个`.EXE`可执行文件,主要是为了让用户能够在不依赖开发环境的情况下方便地在他们的计算机上运行程序。以下是一个详细步骤的说明,包括使用Visual Studio的安装向导来创建安装包。 1....

    winform程序,app.config文件改名、移动的方法

    ### Winform程序中app.config文件改名与移动的方法 在.NET框架中,应用程序配置文件(app.config或web.config)是存储非代码配置信息的关键文件,这些信息包括连接字符串、应用程序设置等。通常情况下,该文件位于...

    c#socket-udp通信聊天winform程序

    c#socket-udp通信聊天winform程序 123

    winform程序自定义操作安装,卸载安装包制作

    Winform 程序自定义操作安装、卸载安装包制作是指在 Winform 程序中实现自定义的安装和卸载操作,包括安装和卸载时的文件处理和保留某些文件等。下面是 Winform 程序自定义操作安装、卸载安装包制作的详细步骤: 一...

    玻璃按钮--很炫的winform按钮重写效果,

    在.NET框架中,WinForm是用于构建桌面应用程序的常用界面设计工具。在Windows应用程序开发中,按钮控件是最基本的元素之一,通常用于接收用户的点击输入。标题“玻璃按钮--很炫的winform按钮重写效果”暗示我们将...

    The-windows-Deploys-Winform-Cshap-project

    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程序中webBrowser使用谷歌内核

    CEF本身是Chromium项目的分支,用于在其他应用程序中嵌入Web浏览器功能,而CefSharp则是CEF与.NET世界的桥梁,让.NET开发者可以方便地在WinForm应用中使用Chromium内核。 在CefSharp中,有两个主要的组件:`Cef...

Global site tag (gtag.js) - Google Analytics