如何使用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,如预期:
但是,当我在Visual Studio中打开Product表时,原始值仍然存在:
不仅如此,当我在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.sdf
, DataDirectory
将扩展到项目的bin文件夹,其中VS复制调试DLL。 如果使用MSI安装程序部署应用程序, DataDirectory
将扩展到用户选择的应用程序的安装文件夹。 在这个答案进一步解释。
请注意, DataDirectory
可能不是用户可写的目录; 它是一个只读数据的好目录,但如果您希望用户写入该文件,则应将其复制到Environment.SpecialFolder.ApplicationData
或应用程序中的某个位置,如本答案中所述 。
还有一件事需要记住。 在进行调试时,您通常希望将原始源数据复制到调试文件夹,对其进行测试,然后丢弃测试数据,因为您通常不希望测试数据包含在最终部署中。 这就是项目中“复制到输出目录”属性的function。 如果它设置为“如果更新则复制”,它可能应该是,那么您对测试数据所做的任何更改都是临时的; 下次更新项目中的原始源数据时,将丢弃测试数据。 请记住,您的应用程序的部署目录通常不能由用户写入,因此您不应该在DataDirectory
编写用户数据。
一位同学向我指出:
“根据我的理解,您的代码更新的数据库,除非您硬编码数据库的路径是/ bin / debug /文件夹中的文件。您在Visual Studio中查看的文件是项目根目录中的文件。”
我更新了连接以指向bin文件夹中的数据库。