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?

¿Fue útil?

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?

ExecuteScalar -

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 ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top