用dataset连接到access数据库后,系统会copy一份mdb数据文件到\bin\Debug目录下。
当我们通过vs运行程序后,数据库的读写都是针对这个数据库的。
我的问题是,当我用vs运行程序后向这个数据库写入数据,没有问题。但是当我再次通过vs运行程序并想数据库中写入数据后。从前更新的所有数据都自动被删除了。
这个现象真的很奇怪,如果允许\bin\Debug目录下生成的exe文件启动程序,写入数据库就不会存在上述问题。
有没有朋友遇见个这个情况呢?怎么解决?谢谢!
当我们通过vs运行程序后,数据库的读写都是针对这个数据库的。
我的问题是,当我用vs运行程序后向这个数据库写入数据,没有问题。但是当我再次通过vs运行程序并想数据库中写入数据后。从前更新的所有数据都自动被删除了。
这个现象真的很奇怪,如果允许\bin\Debug目录下生成的exe文件启动程序,写入数据库就不会存在上述问题。
有没有朋友遇见个这个情况呢?怎么解决?谢谢!
===============================================================
为什么要copy呢?
当你的连接断开后 副本会自动删除````
一种直接从数据源(也就是dataset的选项卡)新建,这种方式在新建的时间会同时生成dataset。
另一种在服务器资源管理器中新建,先建立一个数据库连接,然后手工生产一个dataset,在手动将数据库连接中的表引入dataset中。无论哪种方式,生成dataset时系统会提示是否将该数据库文件copy到项目中。如果选择是,则将该【数据库文件】copy到项目根目录和\bin\Debug两个地方,其中\bin\Debug目录下的【数据库文件】程序运行时都对它进行读写,它与工程中的dataset一一对应。而工程的【数据库连接】是与根目录的【数据库文件】对应的。如果我们要改变数据库表结构或者增删表,就要对根目录的表进行修改,这样工程的【数据库连接】中的表就会同步更新,然后我们在将数据库连接中的新表引入dataset,最后\bin\Debug下的【数据库文件】也就会同步更改。\bin\Debug的【数据库文件】中的数据也和和根目录下的保存一致。但是反过来,\bin\Debug下的【数据库文件】有改变根目录却不会同步变化由于上述原因,所以在vs中运行程序,则对表的更新不能持久,当我们再次在vs中运行程序并执行更新后,上次更新的数据都将消失(\bin\Debug【数据文件】与根目录【数据文件】同步)。但是直接运行\bin\Debug目录下的exe文件就没有这个问题。如果选择不将【数据库文件】copy到项目中,那么所有的更新都将针对源数据库。无论哪种方式生成的dataset,数据库的连接字符串都写在app.config文件中。如果我们需要更改数据库文件的位置更改这个连接字符串即可。