繁体   English   中英

如何使用SQL Server CE和C#更新dB表中的单元格值(Visual Studio 2010)

[英]How can I update a cell value in a dB table, using SQL Server CE and C# (Visual Studio 2010)

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

特别是我想在有人租一部电影后更新显示有关电影数量的单元格。

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

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上看到的两种方法都是有效的,但第二种方法似乎有效。 现在奇怪的是,我租了电影'死硬',这一切都顺其自然,我得到了这些结果:

数据库已更新

一切都很好,从这一点开始就没有办法了,所以我退出了应用程序并重新开始。 我第二次去'Die Hard'租房来确认,并且,成功!! DVD数量的新读数为0,如预期: DVD数量已成功更新!

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

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

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

你必须告诉我们你正在使用什么连接字符串,说“我更新连接指向bin文件夹中的数据库”这样的东西没有用。 您使用的连接字符串如c:\\Users\\Me\\Visual Studio 2010\\Projects\\MyProject\\bin\\debug\\HKRMoviesDB.sdf 这是不对的,它是硬编码到您机器上的VS2010调试测试文件夹,并且对其他任何人都不起作用,只有在您从调试器运行时才能工作,并且在您部署应用程序时无法工作。

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

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

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

一位同学向我指出:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM