no se puede insertar un registro en la tabla
Pregunta
Escribí un programa que incluye escribir y leer desde una base de datos. Cuando ejecuto la aplicación e intento escribir, llamo al siguiente método:
public static void AddMessage(string callID, string content)
{
string select =
"INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime)";
SqlCommand cmd = new SqlCommand(select, conn);
cmd.Parameters.AddWithValue("callId", callID.ToString());
cmd.Parameters.AddWithValue("content", content);
cmd.Parameters.AddWithValue("insertTime", "10.10.2008");
try
{
conn.Open();
cmd.ExecuteScalar();
}
catch(Exception ex)
{
string sDummy = ex.ToString();
}
finally
{
conn.Close();
}
}
Después de la llamada al método, leí todos los registros de la tabla y los muestro en el formulario. El registro insertado antes de la actualización se pudo ver, pero luego, cuando salgo de la aplicación y miro la tabla, no veo el registro.
¿Alguien sabe qué podría causar tal comportamiento?
Solución
¿Estás realizando un commit después de esto? Es posible que esté ejecutando su declaración pero luego no confirme los cambios y realice una reversión implícita.
Creo que el manejo de excepciones parece poco fiable. No tiene sentido capturar algo a menos que pueda manejarlo de alguna manera. El nivel superior de su marco es el lugar para capturar e informar de excepciones inesperadas.
Otros consejos
¿Ha intentado establecer el valor de retorno del método ExecuteScalar en un int y luego verificar el valor en la tabla?
Ejecuta la consulta y devuelve la primera columna de la primera fila en el conjunto de resultados devuelto por la consulta. Las columnas o filas adicionales se ignoran
public static int AddMessage(string callID, string content)
{
Int32 newProdID = 0
string select =
"INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime); SELECT CAST(scope_identity() AS int);";
SqlCommand cmd = new SqlCommand(select, conn);
cmd.Parameters.AddWithValue("callId", callID.ToString());
cmd.Parameters.AddWithValue("content", content);
cmd.Parameters.AddWithValue("insertTime", "10.10.2008");
try
{
conn.Open();
newProdID = (Int32)cmd.ExecuteScalar();
}
catch(Exception ex)
{
string sDummy = ex.ToString();
}
finally
{
conn.Close();
}
return (int)newProdID
}
Encontré el problema. He modificado la cadena de conexión generada automáticamente
connectionString = " Datos Fuente =. \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ URSZRDB.mdf; Integrated Seguridad = Verdadero; Instancia del usuario = Verdadero "
con
connectionString = " Datos Fuente =. \ SQLEXPRESS; AttachDbFilename = C: \ Users \ Niko \ Documents \ Visual Studio 2008 \ Projects \ URSZRWAPChat \ URSZRWAPChat \ URSZRDB.mdf; integrado Seguridad = Verdadero; Instancia del usuario = Verdadero "
y ahora funciona.
No es la primera vez que escribo este tipo de programas y hasta ahora todo ha ido bien de esta manera ...