Проблема с cmd.ExecuteNonQuery () - PullRequest
4 голосов
/ 12 июля 2010

Я вставляю значения в базу данных из веб-формы, используя ADO.NET, C #.БД, которую я использую - это Oracle Database.Значения не вставляются, и программа поражается функцией cmd.ExecuteNonquery ()

. Ниже приведен мой код, пожалуйста, дайте мне знать, если я делаю какую-либо ошибку.любая проблема? ..

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;
}

1 Ответ

3 голосов
/ 12 июля 2010

Есть ли первичный ключ, определенный в этой таблице? Если так, то я предполагаю, что у вас есть другой сеанс, который уже вставил запись с этим ключом, но еще не завершил транзакцию с фиксацией или откатом. Я не вижу коммит как часть вашего кода - я полагаю, вы делаете это где-то еще?

Выполните свой код выше еще раз, и пока он завис, выполните следующий запрос из другого сеанса:

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;

Это должно сказать вам, если вы заблокированы другим сеансом и каков SID этого сеанса.

...