/// <summary>开始事务</summary> /// <returns>剩下的事务计数</returns> public virtual Int32 BeginTransaction() { if (Disposed) { throw new ObjectDisposedException(this.GetType().Name); } if (TransactionCount <= 0) { TransactionCount = 0; _EntitySession.Clear(); } TransactionCount++; if (TransactionCount > 1) { return(TransactionCount); } try { if (!Opened) { Open(); } Trans = Conn.BeginTransaction(); TransactionCount = 1; return(TransactionCount); } catch (DbException ex) { throw OnException(ex); } }
public static bool ExecuteSQL(string[] sqlString) { bool flag = true; SqlConnection connection = new Conn().SqlConnectionSystem(); SqlCommand command = new SqlCommand(); SqlTransaction transaction = connection.BeginTransaction(); command.Connection = connection; command.Transaction = transaction; try { foreach (string str in sqlString) { if (str.Trim().Length != 0) { command.CommandText = str; command.ExecuteNonQuery(); } } transaction.Commit(); } catch { flag = false; transaction.Rollback(); } finally { connection.Close(); } return(flag); }
public static bool NonQuerySqlString(string SqlString) { //new com.jwsoft.common.EncryptDog.EncryptDog().IsAuthorization(); bool flag = false; SqlConnection connection = new Conn().SqlConnectionSystem(); SqlTransaction transaction = connection.BeginTransaction(); SqlCommand command = new SqlCommand { Connection = connection, Transaction = transaction, CommandText = SqlString }; try { command.ExecuteNonQuery(); transaction.Commit(); flag = true; } catch (Exception exception) { transaction.Rollback(); flag = false; throw exception; } finally { command.Dispose(); connection.Close(); } return(flag); }
public bool ExecuteResult(string sqlstr) { bool flag; SqlConnection connection = new Conn().SqlConnectionSystem(); SqlCommand command = new SqlCommand(); SqlTransaction transaction = connection.BeginTransaction(); command.Connection = connection; command.Transaction = transaction; command.CommandText = sqlstr; command.ExecuteNonQuery(); try { transaction.Commit(); flag = true; } catch { transaction.Rollback(); flag = false; } finally { connection.Close(); command.Dispose(); } return(flag); }
public void RollbackTwice() { var transaction = Conn.BeginTransaction(); transaction.Rollback(); Assert.That(() => transaction.Rollback(), Throws.Exception.TypeOf <InvalidOperationException>()); }
/// <summary> /// 开始事务 /// </summary> /// <returns></returns> public DbTransaction BeginTransaction() { if (Debug) { WriteLog("开始事务:{0}", ID); } TransactionCount++; if (TransactionCount > 1) { return(Trans); } try { if (!Opened) { Open(); } Trans = Conn.BeginTransaction(); TransactionCount = 1; return(Trans); } catch (Exception ex) { throw OnException(ex); } }
public void BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted) { if (_transaction != null) { _transaction = Conn.BeginTransaction(isolationLevel); } }
public void CursorStatement() { using (var t = Conn.BeginTransaction()) { for (var x = 0; x < 5; x++) { ExecuteNonQuery(@"INSERT INTO data (field_text) VALUES ('X')"); } Int32 i = 0; var command = new NpgsqlCommand("DECLARE TE CURSOR FOR SELECT * FROM DATA", Conn); command.ExecuteNonQuery(); command.CommandText = "FETCH FORWARD 3 IN TE"; var dr = command.ExecuteReader(); while (dr.Read()) { i++; } Assert.AreEqual(3, i); dr.Close(); i = 0; command.CommandText = "FETCH BACKWARD 1 IN TE"; var dr2 = command.ExecuteReader(); while (dr2.Read()) { i++; } Assert.AreEqual(1, i); dr2.Close(); command.CommandText = "close te;"; command.ExecuteNonQuery(); } }
public void BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.Serializable) { if (_transaction == null) { _transaction = Conn.BeginTransaction(isolationLevel); } }
/// <summary> /// Create view on edges /// </summary> /// <param name="tableSchema"> The Schema name of node table. Default(null or "") by "dbo".</param> /// <param name="supperNodeName"> The name of supper node. </param> /// <param name="edgeViewName"> The name of supper edge. </param> /// <param name="edges"> The list of message of edges for merging. /// The message is stored in tuple, containing (node table name, edge column name).</param> /// <param name="edgeAttribute"> The attributes' names in the supper edge.</param> /// <param name="attributeMapping"> User-supplied attribute-mapping. /// Type is List<Tuple<string, List<Tuple<string, string, string>>>>. /// That is, every attribute in supper edge is mapped into a list of attributes, /// with the message of <node table name, edge column name, attribute name> /// If one attribute in supper edge need to be mapped into all the user-supplied edges's same-name attributes, /// user can pass a null or empty parameter of List<Tuple<string, string, string>>. /// When "attributeMapping" is empty or null, the program will map the atrributes of supper edge /// into all the same-name attributes of all the user-supplied edges.</param> public void CreateEdgeView(string tableSchema, string supperNodeName, string edgeViewName, List <Tuple <string, string> > edges, List <string> edgeAttribute, List <Tuple <string, List <Tuple <string, string, string> > > > attributeMapping = null) { supperNode = supperNodeName; var transaction = Conn.BeginTransaction(); var command = Conn.CreateCommand(); command.CommandTimeout = 0; command.Transaction = transaction; #if DEBUG transaction.Commit(); #endif try { CreateEdgeViewDecoder(tableSchema, edgeViewName, edges, edgeAttribute, command, attributeMapping); updateEdgeViewMetaData(tableSchema, edgeViewName, command); #if !DEBUG transaction.Commit(); #endif } catch (Exception error) { throw new EdgeViewException(error.Message); } }
public void RollbackWithNoTransaction() { var transaction = Conn.BeginTransaction(); transaction.Rollback(); transaction.Rollback(); }
public void BeginTransaction() { try { m_transaction = Conn.BeginTransaction(); } catch { } }
public void TransactionCommit() { var tx = Conn.BeginTransaction(); ExecuteNonQuery("INSERT INTO data (field_text) VALUES ('X')", tx: tx); tx.Commit(); Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(1)); }
/// <summary> /// Drop Edge View /// </summary> /// <param name="nodeViewSchema">The name of node view. Default(null or "") by "dbo".</param> /// <param name="nodeViewName">The name of node view.</param> /// <param name="externalTransaction">An existing SqlTransaction instance under which the drop edge view will occur.</param> public void DropNodeView(string nodeViewSchema, string nodeViewName, SqlTransaction externalTransaction = null) { SqlTransaction transaction = externalTransaction ?? Conn.BeginTransaction(); var command = Conn.CreateCommand(); command.Transaction = transaction; try { //drop view const string dropView = @"drop view [{0}]"; command.CommandText = string.Format(dropView, nodeViewName); command.ExecuteNonQuery(); //update metatable const string deleteNodeViewColumn = @" Delete from [{0}] where [NodeViewColumnId] in ( Select columnId From [{1}] NodeTableColumn Where TableSchema = @schema and TableName = @tablename and ColumnRole = @role ) Delete from [{1}] Where TableSchema = @schema and TableName = @tablename and ColumnRole = @role"; command.Parameters.AddWithValue("schema", nodeViewSchema); command.Parameters.AddWithValue("tablename", nodeViewName); command.Parameters.AddWithValue("role", 4); command.CommandText = string.Format(deleteNodeViewColumn, MetadataTables[5], MetadataTables[1]); command.ExecuteNonQuery(); const string deleteNodeView = @" Delete from [{0}] where NodeViewTableId in ( select tableid from [{1}] where TableRole = @role and TableSchema = @schema and TableName = @tablename ) delete from [{1}] where TableRole = @role and TableSchema = @schema and TableName = @tablename"; command.Parameters["role"].Value = 1; command.CommandText = string.Format(deleteNodeView, MetadataTables[7], MetadataTables[0]); command.ExecuteNonQuery(); if (externalTransaction == null) { transaction.Commit(); } } catch (Exception error) { if (externalTransaction == null) { transaction.Rollback(); } throw new NodeViewException("Drop node view:" + error.Message); } }
public void Commit() { ExecuteNonQuery("CREATE TEMP TABLE data (name TEXT)"); var tx = Conn.BeginTransaction(); ExecuteNonQuery("INSERT INTO data (name) VALUES ('X')", tx: tx); tx.Commit(); Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(1)); }
public void RollbackOnDispose() { var tx = Conn.BeginTransaction(); ExecuteNonQuery("INSERT INTO data (field_text) VALUES ('X')", tx: tx); tx.Dispose(); Assert.That(tx.Connection, Is.Null); Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(0)); }
public void NestedTransaction() { using (Conn.BeginTransaction()) { using (Conn.BeginTransaction()) { } } }
/// <summary> /// 开始事务 /// </summary> /// <param name="isolationLevel">事务隔离级别</param> public virtual void BeginTran(IsolationLevel isolationLevel) { if (Tran != null) { return; } Tran = Conn.BeginTransaction(isolationLevel); _dbContext.Database.UseTransaction(Tran); }
public void RollbackOnDispose() { ExecuteNonQuery("CREATE TEMP TABLE data (name TEXT)"); var tx = Conn.BeginTransaction(); ExecuteNonQuery("INSERT INTO data (name) VALUES ('X')", tx: tx); tx.Dispose(); Assert.That(tx.Connection, Is.Null); Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(0)); }
public void RollbackFailed() { var tx = Conn.BeginTransaction(); ExecuteNonQuery("INSERT INTO data (field_text) VALUES ('X')", tx: tx); Assert.That(() => ExecuteNonQuery("BAD QUERY"), Throws.Exception); tx.Rollback(); Assert.That(tx.Connection, Is.Null); Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(0)); }
public void TransactionSetOk() { ExecuteNonQuery("INSERT INTO data (field_text) VALUES ('X')"); using (var t = Conn.BeginTransaction()) { var command = new NpgsqlCommand("select count(*) from data", Conn); command.Transaction = t; Object result = command.ExecuteScalar(); Assert.AreEqual(1, result); } }
/// <summary> /// 开始事务 /// </summary> public void BeginTran() { if (this._dbTrans == null) { if (Conn.State == ConnectionState.Closed) { this.Conn.Open(); } this._dbTrans = Conn.BeginTransaction(); this._committed = false; } }
/// <summary> /// 开始事务 /// </summary> /// <param name="isolationLevel">事务隔离级别</param> public void BeginTran(IsolationLevel isolationLevel) { if (Tran != null) { return; } Conn = MyContext.Database.Connection; if (Conn.State == System.Data.ConnectionState.Closed) { Conn.Open(); } Tran = Conn.BeginTransaction(isolationLevel); }
public bool BeginTransaction() { try { et = Conn.BeginTransaction(); return(true); } catch (Exception ex) { Console.WriteLine(ex.Message); return(false); } }
public void BeginTransaction() { /* * 仅限 组件外 调用。 */ if (Tran != null) { throw XConfig.EC.Exception(XConfig.EC._090, "上下文中事务已开启,无需再次开启!"); } if (AutoClose) { Conn.Open(); } Tran = Conn.BeginTransaction(); }
public void FailedTransactionCantRollbackToSavepointWithCustomTimeout() { var transaction = Conn.BeginTransaction(); transaction.Save("TestSavePoint"); using (var command = new NpgsqlCommand("SELECT unknown_thing", Conn)) { command.CommandTimeout = 1; try { command.ExecuteScalar(); } catch (NpgsqlException) { transaction.Rollback("TestSavePoint"); } } }
public void Rollback([Values(PrepareOrNot.NotPrepared, PrepareOrNot.Prepared)] PrepareOrNot prepare) { var tx = Conn.BeginTransaction(); var cmd = new NpgsqlCommand("INSERT INTO data (field_text) VALUES ('X')", Conn, tx); if (prepare == PrepareOrNot.Prepared) { cmd.Prepare(); } cmd.ExecuteNonQuery(); Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(1)); tx.Rollback(); Assert.That(tx.Connection, Is.Null); Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(0)); }
public void MultipleRefCursorSupport() { ExecuteNonQuery(@"CREATE OR REPLACE FUNCTION testmultcurfunc() RETURNS SETOF refcursor AS 'DECLARE ref1 refcursor; ref2 refcursor; BEGIN OPEN ref1 FOR SELECT 1; RETURN NEXT ref1; OPEN ref2 FOR SELECT 2; RETURN next ref2; RETURN; END;' LANGUAGE 'plpgsql';"); using (Conn.BeginTransaction()) { var command = new NpgsqlCommand("testmultcurfunc", Conn); command.CommandType = CommandType.StoredProcedure; using (var dr = command.ExecuteReader()) { dr.Read(); Assert.That(dr.GetInt32(0), Is.EqualTo(1)); dr.NextResult(); dr.Read(); Assert.That(dr.GetInt32(0), Is.EqualTo(2)); } } }
public void TestSavePointWithSemicolon() { const String theSavePoint = "theSavePoint;"; using (var transaction = Conn.BeginTransaction()) { transaction.Save(theSavePoint); ExecuteNonQuery("INSERT INTO data (field_text) VALUES ('savepointtest')"); var result = ExecuteScalar("SELECT COUNT(*) FROM data WHERE field_text = 'savepointtest'"); Assert.AreEqual(1, result); transaction.Rollback(theSavePoint); result = ExecuteScalar("SELECT COUNT(*) FROM data WHERE field_text = 'savepointtest'"); Assert.AreEqual(0, result); } }
/// <summary>给命令设置事务和连接</summary> /// <param name="cmd">命令</param> /// <param name="execute">是否执行增删改</param> /// <returns></returns> public DbTransaction Check(DbCommand cmd, Boolean execute) { if (cmd.Transaction != null) { return(cmd.Transaction); } // 此时事务可能为空 var tr = Tran; if (cmd.Connection != null && cmd.Connection != Conn) { return(tr); } cmd.Transaction = tr; cmd.Connection = Conn; // 不要为查询打开事务 if (!execute) { return(tr); } Executes++; if (tr != null) { return(tr); } //var ss = _Session; //if (!ss.Opened) ss.Open(); tr = Tran = Conn.BeginTransaction(Level); cmd.Transaction = tr; cmd.Connection = Conn; Level = tr.IsolationLevel; ID = ++_gid; Log.Debug("Tran.Begin {0} {1}", ID, Level); return(tr); }