Pregunta

Estoy insertando valores en la base de datos desde una forma web utilizando ADO.NET, C #.DB Estoy usando es la base de datos Oracle.Los valores no se están insertando y el programa se golpea en el cmd.executenonquery ()

Aquí está mi código a continuación, por favor hágamelo saber si estoy haciendo algún error ... Estoy usando algunos métodos estáticos, ¿será ese problema? ..

public Boolean AddDivCo(Int32 UserNo,String ID, String Role, String DivName )
{
    Boolean ret = false;


    OracleCommand cmd = new OracleCommand();
    OracleConnection conn = new OracleConnection();
    int i = 0;

    try
    {
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["Conn_RIS"].ConnectionString;
        conn.Open();

        cmd.Connection = conn;
        String mySQL = "INSERT INTO R4CAD_ADMIN (AdminUserNo, AdminID, AdminRole, AdminDivName)VALUES(:AdminUserNo,:AdminID,:AdminRole,:DivName)";

        OracleParameter p1 = new OracleParameter("AdminUserNo", OracleType.Number);
        p1.Value = UserNo;
        cmd.Parameters.Add(p1);

        OracleParameter p2 = new OracleParameter("AdminID", OracleType.VarChar);
        p2.Value = ID;
        cmd.Parameters.Add(p2);

        OracleParameter p3 = new OracleParameter("AdminRole", OracleType.VarChar);
        p3.Value = Role;
        cmd.Parameters.Add(p3);

        OracleParameter p4 = new OracleParameter("DivName", OracleType.VarChar);
        p4.Value = DivName;
        cmd.Parameters.Add(p4);

        cmd.CommandText = mySQL;

        i = cmd.ExecuteNonQuery();

        if (i != 0)
        {
            ret = true;
        }
        else
        {
            ret = false;
        }
    }
    catch (Exception err)
    {
        Console.WriteLine(err.Message.ToString());
    }
    finally
    {
        cmd.Dispose();
        //cmd = null;
        //conn = null;
        conn.Close();
    }
    return ret;
}

¿Fue útil?

Solución

¿Hay una clave principal definida en esta tabla?Si es así, entonces, mi conjetura es que tiene otra sesión que ya ha insertado un registro con esta clave, pero aún no ha terminado la transacción con un compromiso o retroceso.No veo un comité como parte de su código, ¡asumo que está haciendo eso en otro lugar?

Ejecute su código de arriba una vez más y, si bien está HUNG, ejecute la siguiente consulta de otra sesión:

SELECT
      (SELECT username FROM v$session WHERE sid=a.sid) blocker,
       a.sid,
      ' is blocking ',
       (SELECT username FROM v$session WHERE sid=b.sid) blockee,
           b.sid
  FROM v$lock a JOIN v$lock b ON (a.id1 = b.id1 AND a.id2 = b.id2)
 WHERE a.block = 1
   AND b.request > 0;

Esto debería decirle si está siendo bloqueado por otra sesión y qué es el SID de esa sesión.

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