¿Cómo puedo actualizar un valor de celda en una tabla dB, usando SQL Server CE y C # (Visual Studio 2010)

Estoy escribiendo una pequeña aplicación para la universidad, una aplicación de alquiler de videos. No tengo problemas para leer desde la base de datos, pero no puedo actualizar los datos en las tablas.

En particular, estoy buscando actualizar la celda que muestra la cantidad de una película en stock después de que alguien alquila una película.

Hasta ahora he estado intentando esto:

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

No obtengo ningún error, pero la celda no se actualiza en la tabla. Cualquier ayuda sería muy apreciada, por favor avíseme si necesita más información.

ACTUALIZACIÓN: OK, tengo algunos desarrollos interesantes, he actualizado el código a esto:

 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(); 

Por lo que puedo decir buscando en MSDN ambos métodos son válidos, pero este segundo parece estar funcionando. Ahora, lo más extraño es que alquilo la película ‘Die Hard’, todo va como un loco, obtengo estos resultados:

Base de datos actualizada

Todo bien, no hay forma de volver de este punto, así que dejé la aplicación y comencé de nuevo. Voy a alquilar ‘Die Hard’ por segunda vez para confirmar, ¡y, éxito! la nueva lectura en la cantidad de DVD es 0 como se esperaba: Cantidad de DVD actualizada con éxito!

Pero, cuando abro la tabla Product en Visual Studio, los valores originales siguen ahí: En Visual Studio, la tabla no se ha actualizado

No solo eso, sino que cuando ejecuto la aplicación nuevamente después de abrir la tabla en Visual Studio, las cantidades de DVD se restablecen a los valores originales y los valores actualizados desaparecen.

¿Me estoy perdiendo algo simple aquí? Intenté actualizar la tabla, no hace ninguna diferencia. Siempre que no abra la tabla en Visual Studio, la aplicación se comporta como se espera, no importa cuántas veces la ejecute, los valores se actualizan como se espera, hasta que abro la tabla.

Tiene que decirnos exactamente qué cadena de conexión está utilizando, diciendo cosas como “Actualicé la conexión para apuntar a la base de datos en la carpeta bin” no es útil. ¿Está utilizando una cadena de conexión como c:\Users\Me\Visual Studio 2010\Projects\MyProject\bin\debug\HKRMoviesDB.sdf ? Eso no está bien, está codificado de forma rígida en la carpeta de prueba de depuración VS2010 de su máquina, y no funcionará para nadie más, solo funcionará cuando se ejecute desde el depurador y no funcionará cuando implemente su aplicación.

ADO.NET busca barras verticales en las cadenas de conexión y expande la cadena adjunta con la propiedad AppDomain. Por ejemplo, si utiliza Data Source=|DataDirectory|\HKRMoviesDB.sdf del depurador VS, DataDirectory expande a la carpeta bin de su proyecto, donde VS copia los archivos DLL de depuración. Si despliega su aplicación usando un instalador de MSI, DataDirectory expande a la carpeta de instalación de su aplicación elegida por el usuario. Una explicación más detallada es esta respuesta .

Tenga en cuenta que DataDirectory puede no ser un directorio que los DataDirectory puedan escribir; es un buen directorio para datos de solo lectura, pero si desea que los usuarios escriban en el archivo, debe copiarlo en Environment.SpecialFolder.ApplicationData o en algún lugar de su aplicación, tal como se explica en esta respuesta .

Hay una cosa más a tener en cuenta. Cuando está depurando, normalmente quiere copiar los datos de origen originales a la carpeta de depuración, probarlos y luego descartar los datos de prueba porque normalmente no desea que los datos de prueba se incluyan en la implementación final. Esto es lo que hace la propiedad “Copiar en directorio de salida” en su proyecto. Si está configurado para “copiar si es más reciente”, lo que probablemente debería ser, entonces cualquier cambio que realice en sus datos de prueba es temporal; la próxima vez que actualice sus datos originales en su proyecto, sus datos de prueba serán descartados. Recuerde, los usuarios no pueden escribir el directorio de implementación de su aplicación, por lo que no debería escribir datos de usuario en DataDirectory todos modos.

Un compañero de estudios me señaló esto:

“Por lo que entiendo, la base de datos que actualiza su código, a menos que haya codificado la ruta a la base de datos, es el archivo en su carpeta / bin / debug /. El archivo que ve en Visual Studio es el que está en la raíz del proyecto”.

Actualicé la conexión para apuntar a la base de datos en la carpeta bin.