记得前一次用Access数据库已是多年前的事了,那时还在学校混日子。
这次,由于一个实验性的小项目,再次接触Access数据库(Access2007)。在使用Access数据库的过程中,遇见一个小小的问题,问题虽小,但是很纠结。
问题就是:我在Debug模式下,向Access数据库插入数时,数据明明插入成功了(因为界面刷新时重新获取的数据中已经包含此条数据了,且单步跟踪代码时,ExecuteNonQuery()方法返回值也为1,说明插入成功了),但是停止Debug后,再次启动程序,发现数据并没有被插入,因为界面刷新时获取的数据源中并不包含此条数据,查看数据库文件,发现也没有此条记录。
问题调查:通过代码跟踪及对数据库连接等对象值的监视,发现不存在任何异常之处,也就是说数据应该是成功插入了。这下子让哥纠结了,问题到底出在哪里呢。
问题解决:通过查阅资料发现,在VS的Debug模式下调试程序时,VS都会从指定的目录拷贝一份Access数据库文件到Debug目录下面,而真正被修改数据的也是Debug下面的那个数据库文件。所以就出现了前面所描述的现象,每次调试时显示插入成功,但是退出Debug环境再进入时就不行了,那是因为再次进入时,VS会再次从指定的目录拷贝一份Access数据库文件到Debug目录下面,所以数据还是以前的,没有发生改变。另外,直接运行Debug下面的exe文件会发现一切正常,因为这时不会导致VS的拷贝发生。
那这个问题怎么解决的呢,我是将数据库的链接地址改为了一个绝对地址就可以了。
刚开始:
<add name="AccountBookConnectionString"
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\Data\accountbook.accdb;Persist Security Info=True"
providerName="System.Data.OleDb" />
</connectionStrings>
修改后:
<add name="AccountBookConnectionString"
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\MyWork\project\201307\SmallAccountBook\SmallAccountBook\SmallAccountBook\Data\accountbook.accdb;Persist Security Info=True"
providerName="System.Data.OleDb" />
</connectionStrings>
我个人认为,修改成绝对地址后,VS每次就会访问绝对地址所指的数据库文件,尽管拷贝操作还会进行(通过实验,发现仍会拷贝一份数据库文件至Debug目录下面,但是应该不会对其进行操作)。
问题虽小,但是有点纠结。呵呵,还是不熟悉导致的,看来还是得多实验多总结啊。