用dataset连接到access数据库后,系统会copy一份mdb数据文件到\bin\Debug目录下。
当我们通过vs运行程序后,数据库的读写都是针对这个数据库的。
我的问题是,当我用vs运行程序后向这个数据库写入数据,没有问题。但是当我再次通过vs运行程序并想数据库中写入数据后。从前更新的所有数据都自动被删除了。
这个现象真的很奇怪,如果允许\bin\Debug目录下生成的exe文件启动程序,写入数据库就不会存在上述问题。
有没有朋友遇见个这个情况呢?怎么解决?谢谢!

解决方案 »

  1.   

    不是你的程序里没有把更新提交给OleDataAdapter的原因呀?单单的只修改DateSet中的表镜像是不会有效果的.必须调用OleDataAdapter对象的Update方法才能真正保存对数据库的修改.
      

  2.   

    使用了updatat方法的,提交后数据也确确实实写入了数据库,可以在数据库看到插入的数据。问题是第二次在启动程序并插入数据后,上次插入的数据就消失了。更诡异的是,在第二次启动程序插入后,插入数据前,上次插入的数据都还在。一旦执行插入,上次的数据就消失啦,恢复成空白的表,里面只有一条数据,就是本次启动程序后插入的那一条。
      

  3.   

    用dataset连接到access数据库后,系统会copy一份mdb数据文件到\bin\Debug目录下。 
    ===============================================================
    为什么要copy呢?
      

  4.   

    这个不是我copy的,是生成dataset数据源时,系统copy的。系统只认copy过去的这个数据库。
      

  5.   

    COPY的是数据库副本。。改副本没用的 必须修改mdb才行``````
    当你的连接断开后 副本会自动删除````
      

  6.   

    问题在于当在vs中运行时,数据只会写入这个数据库副本,不会写入原来的数据库中。连接断开副本并没有被删除,而且副本中更新的数据都还在,但是很奇怪的是再次用过vs运行插入数据后,先前在副本中更新的数据都自动删除啦。但是直接到\bin\Debug下运行exe文件又可以正常保存数据,不会出现上述情况。
      

  7.   

    找啦很久都没有找到相关的资料,没有办法,还是自力更生吧。通过实验,知道怎么使用dataset连接access数据库了,在这里贴出来和大家共享。同时感谢楼上各位回复,闪分。当我们新建一个access数据连接,有两种方式:
    一种直接从数据源(也就是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文件中。如果我们需要更改数据库文件的位置更改这个连接字符串即可。