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

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

特别是我希望在某人出租电影后更新显示有关电影数量的单元格。

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

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或应用程序中的某个位置,如本答案中所述 。

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

一位同学向我指出:

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

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