locked
FAQs:数据库没有更新,但是应用程序没有报错? RRS feed

  • 问题

  • 为了帮助大家更好地学习 ADO.NET DataSet 技术,微软论坛技术支持团队编辑了一些列的 ADO.NET DataSet 常见问题及解答" 精华帖。

    本帖的主题是: 数据库没有更新,但是应用程序没有报错

    如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。

    如果您想阅读更多的 "ADO.NET DataSet 常见问题及解答",请打开索引页面:

    http://social.msdn.microsoft.com/Forums/zh-CN/adonetzhchs/thread/f968dfe5-f9e3-4ed0-9c7f-cf26837ea828


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月25日 9:54

答案

  • 发生这种情况通常有两个原因:

    (1)     在你的DataAdapter或者TableAdapter中调用Update之前,在你的DataRow/DataTable/DataSet中调用AcceptChangesAcceptChanges将提交所有的改变,这些改变是数据加载时造成的或者是上次调用AcceptChanges造成的。这就意味着,如果你有一个被标记为已修改的行,它现在将保持不变。当你调用Update时,它不会知道,因为该行的改变需要提交到数据库。这同样适用于插入和删除行。有关详细信息,请参阅:http://msdn2.microsoft.com/en-us/library/system.data.dataset.acceptchanges.aspx.

    这适用于所有的数据库后端和应用程序类型(ASP.NET, Windows Forms, 等等)。

    (2)     另一个常见的问题是在Visual Studio中有一个选项来复制你的数据库文件到项目输出文件夹。通常在你添加数据库文件到你的项目的时候,会通过一个Access MDB文件或者一个SQL Server MDF文件来完成。

    这个复制选项应用于每次运行应用程序。因此,尽管数据库事实上已经被更新,更新回去副本而不是你期望的原始文件。其关键是在项目中的数据库文件的“Copy to Output Directory”属性。通常默认设置成“Copy always”。这就意味着,每次你建立,运行或者调试应用程序的时候,Visual Studio复制项目文件到输出目录下,这就是应用程序连接到的地方。

    在这些情况下,你很可能也将用一个包括"|DataDirectory|"选项的连接字符串。对于非Web应用程序,这是你的项目输出文件夹中创建可执行文件(通常在bin\debug)。为了确保这个连接字符串正常工作,Visual Studio选择"Do not copy" 的默认设置。你可以保持字符串原来的样子,但是改变复制选项为"Do not copy",在这种情况下,你应该在程序运行之间看到你改变的东西,或者如果你检查应用程序外的数据库。请务必要检查在输出文件夹里的副本。你也可以更改连接字符串和复制属性,指向你实际想要连接的文件。

    这适用于Access MDB文件和SQL Server MDF文件,只要你在运行时通过在字符串中用AttachDBFilename指定位置来连接MDF文件。Access数据库总是基于文件的,所以没有必要使用一个特殊关键字。

    有一个工具可以用来查看应用程序到底是用的是哪个数据库文件:FileMon http://www.sysinternals.com  在运行应用程序之前开始追踪,然后观察实际访问的是哪个文件。请记住,跟踪可能还包括任何文件的副本,所以一定要搜索出所有你文件名的结果,以确保它们都在使用你期望的文件。

     

    相关帖子:

    http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/ad837d14-31ea-445f-b830-1a8682b69e68

     

    http://social.msdn.microsoft.com/Forums/en-US/Vsexpressinstall/thread/67b68979-bf82-4bfc-bb53-0955b6ddaeec

    http://social.msdn.microsoft.com/Forums/en/adodotnetdataset/thread/71a3d1e1-2588-499d-b603-c5c643f6fe50

    http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/62351f4b-bb47-4c4d-a9c6-3e7f14cf0f2e/


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月25日 11:24