最近在做联系人管理的应用程序,这个程序的数据源原本有如下数据
现在我向数据源添加数据
点击保存后
这里明明是已经将数据保存到了数据库
等待添加联系人成功后再次启动程序发现
这表明确实将刚添加的联系人已经保存到数据源中,可是非常不妙,我发现我的程序还有一些需要完善。于是改了一下,然后再次启动程序奇怪的现象出现了。
这种奇怪的问题困扰了我很久,程序没改之前再次启动都能看到我添加的联系人,为何程序一改,那个添加的联系人就没有了呢?我们来看看连接字符串
之前用的是这个坑爹的字符串,为何说坑爹啊?其实这里我也搞不懂,那个|DataDirectory|应该表示程序启动的目录,程序调试时在启动目录下面自动新建了一个App_Data文件夹。在用这个连接字符串之前我并不知道这个是C#语言用来表示相对路径的其中一种方法。因此连接了许多次都失败,于是决定用绝对路径来先把程序的其他功能完善先。等到功能差不多就达到要求了,剩下的就是解决连接字符串怎么用相对路径来连的问题了,于是找到了|DataDirectory|这种方法。这是有问题的
我用VS添加数据库文件的是"解决方案\App_Data"这个路径
也就是说在这个文件夹里面
可是程序运行时读取的是"解决方案\bin\Debug\App_Data"这个目录下的数据库文件
我都不清楚什么时候在这里多了一个同样的ContactDB数据库文件,我估计我第一次运行程序并连接数据库文件成功时,系统自动拷贝了一份到启动目录下的App_Data文件夹下。问题来了,这是系统自动生成的文件夹,那么应该是编译生成项目的时候生成的。这也就意味着系统每次编译或生成项目都会清理之前的文件重新生成这些文件,就是说数据库文件又是重新从“解决方案\App_Data\ContactDB.mdf"拷贝一份过去”Debug\App_Data"目录下。所以就会出现我说的这种奇怪的现象。为了解决这个问题我改了一下连接字符串用"conn1"
同时将数据库文件放到程序启动的目录下如图所示
经过后面多次试验,没有像之前那样重新生成项目后数据更新后丢失了,而没有真正意义的保存到数据库。
使用Application.StartUppath这个相对路径之后,尝试添加几个联系人
接着按下"F6"这颗键
再次启动程序