0

我正在为大学写一个小型应用程序,一个视频租赁应用程序。我从数据库读取没有问题,但我无法更新表中的数据。

特别是,我希望在有人租借电影后更新显示库存电影数量的单元格。

到目前为止,我一直在尝试这个:

string updateDVDs = "UPDATE Products SET dvd_quantity = " + product.Quantity + " WHERE title = '"+ product.Name +"';";
cmdUpdateDVDs = new SqlCeCommand(updateDVDs, dBConnection);
dBConnection.Open();
cmdUpdateDVDs.ExecuteNonQuery();
dBConnection.Close();

我没有收到任何错误,但表格中的单元格没有更新。任何帮助将不胜感激,如果您需要更多信息,请告诉我。

更新: 好的,我有一些有趣的进展,我已将代码更新为:

string updateDVDs = "UPDATE Products SET dvd_quantity = " + product.Quantity + " WHERE title = '" + product.Name + "'";
dBConnection = new SqlCeConnection(connectionString);
cmdUpdateDVDs = new SqlCeCommand(updateDVDs, dBConnection);
cmdUpdateDVDs.Connection.Open();
int rows = cmdUpdateDVDs.ExecuteNonQuery();
dBConnection.Close();

从我在 MSDN 上可以看出,这两种方法都是有效的,但第二种方法似乎有效。现在奇怪的是,我租了电影《虎胆龙威》,一切都很顺利,我得到了这些结果:

数据库已更新

一切都好,从这一点上没有退路,所以我退出了应用程序并重新开始。我第二次去租《虎胆龙威》确认,成功!!DVD 数量上的新读数为 0,正如预期的那样: DVD数量更新成功!

但是,当我在 Visual Studio 中打开 Product 表时,原始值仍然存在: 在 Visual Studio 中,表尚未更新

不仅如此,当我在 Visual Studio 中打开表格后再次运行应用程序时,DVD 数量会重置为原始值,而更新的值会消失。

我在这里错过了一些简单的东西吗?我试过刷新表,它没有任何区别。只要我不在 Visual Studio 中打开表,应用程序就会按预期运行,无论我运行多少次,值都会按预期更新,直到我打开表本身。

4

2 回答 2

2

您必须确切地告诉我们您使用的是什么连接字符串,说“我更新了连接以指向 bin 文件夹中的数据库”之类的内容没有帮助。您是否使用类似的连接字符串c:\Users\Me\Visual Studio 2010\Projects\MyProject\bin\debug\HKRMoviesDB.sdf?这是不对的,这是硬编码到您机器上的 VS2010 调试测试文件夹中的,并且对其他人不起作用,仅当您从调试器运行时才起作用,并且在您部署应用程序时不起作用。

ADO.NET 在连接字符串中查找竖线并使用 AppDomain 属性扩展封闭的字符串。例如,如果您Data Source=|DataDirectory|\HKRMoviesDB.sdf从 VS 调试器中使用,则DataDirectory展开到项目的 bin 文件夹,VS 会在其中复制调试 DLL。如果您使用 MSI 安装程序部署应用程序,则会DataDirectory扩展到用户选择的应用程序安装文件夹。进一步的解释在这个答案

请注意,它DataDirectory可能不是用户可写的目录;它是一个很好的只读数据目录,但如果您希望用户写入该文件,您应该将其复制到应用程序中Environment.SpecialFolder.ApplicationData或应用程序中的某个位置,如本答案中所述。

还有一件事要记住。在调试时,您通常希望将原始源数据复制到调试文件夹,对其进行测试,然后丢弃您的测试数据,因为您通常不希望您的测试数据包含在最终部署中。这就是项目中的“复制到输出目录”属性的作用。如果它设置为“如果更新则复制”,它可能应该是,那么您对测试数据所做的任何更改都是暂时的;下次您在项目中更新原始源数据时,您的测试数据将被丢弃。请记住,您的应用程序的部署目录通常不能由用户写入,因此您不应该以任何方式写入用户数据DataDirectory

于 2012-11-09T17:34:19.957 回答
0

一位同学向我指出了这一点:

“据我了解,除非您对数据库路径进行硬编码,否则您的代码更新的数据库是 /bin/debug/ 文件夹中的文件。您在 Visual Studio 中查看的文件是项目根目录中的文件。”

我更新了连接以指向 bin 文件夹中的数据库。

于 2012-11-09T09:42:31.323 回答