Problem with cmd.ExecuteNonQuery ()

I am inserting values ​​into a database from Webform using ADO.NET, C #. The database I'm using is Oracle Database. Values ​​are not inserted and the program ends up in cmd.ExecuteNonquery ()

Here is my code below. Please let me know. If I am wrong. Am I using some static methods that may be the problem? ..

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; } 
+4
source share
1 answer

Is there a primary key specified in this table? If so, then I assume that you have another session that has already inserted a record with this key, but has not yet completed the transaction with a commit or rollback. I don't see the commit as part of your code - I assume you are doing this somewhere else?

Run one more code above, and while it hangs, run the following query from another session:

 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; 

This should tell you if you are blocked by another session and what is the SID of this session.

+3
source

Source: https://habr.com/ru/post/1315403/


All Articles