本文整理汇总了C#中IQueryContext.AutoCommit方法的典型用法代码示例。如果您正苦于以下问题:C# IQueryContext.AutoCommit方法的具体用法?C# IQueryContext.AutoCommit怎么用?C# IQueryContext.AutoCommit使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IQueryContext
的用法示例。
在下文中一共展示了IQueryContext.AutoCommit方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ExecuteQuery
protected virtual IQueryResponse[] ExecuteQuery(IQueryContext context, string text, IEnumerable<QueryParameter> parameters)
{
// TODO: Log a debug message..
IQueryResponse[] response = null;
try {
try {
// For simplicity - all database locking is now exclusive inside
// a transaction. This means it is not possible to execute
// queries concurrently inside a transaction. However, we are
// still able to execute queries concurrently from different
// connections.
//
// It's debatable whether we even need to perform this Lock anymore
// because we could change the contract of this method so that
// it is not thread safe. This would require that the callee ensures
// more than one thread can not execute queries on the connection.
context.Session.ExclusiveLock();
// Execute the Query (behaviour for this comes from super).
response = CoreExecuteQuery(context, text, parameters);
// Return the result.
return response;
} finally {
try {
// This is executed no matter what happens. Very important we
// unlock the tables.
context.Session.ReleaseLocks();
} catch (Exception e) {
// TODO: Log errors ...
}
}
} finally {
// This always happens after tables are unlocked.
// Also guarenteed to happen even if something fails.
// If we are in auto-commit mode then commit the Query here.
// Do we auto-commit?
if (context.AutoCommit()) {
// Yes, so grab an exclusive Lock and auto-commit.
try {
// Lock into exclusive mode.
context.Session.ExclusiveLock();
// If an error occured then roll-back
if (response == null) {
// Rollback.
context.Session.Rollback();
} else {
try {
// Otherwise commit.
QueryContext.Session.Commit();
} catch (Exception e) {
foreach (IQueryResponse queryResponse in response) {
// Dispose this response if the commit failed.
DisposeResult(queryResponse.ResultId);
}
// And throw the SQL Exception
throw;
}
}
} finally {
context.Session.ReleaseLocks();
}
}
}
}
示例2: Authenticate
protected virtual bool Authenticate(string defaultSchema, string username, string password)
{
if (CurrentState == ConnectorState.Authenticated &&
QueryContext != null)
throw new InvalidOperationException("Already authenticated.");
// TODO: Log a debug information
// TODO: Log an information about the logging user...
try {
QueryContext = OnAuthenticate(defaultSchema, username, password);
if (QueryContext == null)
return false;
QueryContext.AutoCommit(autoCommit);
QueryContext.IgnoreIdentifiersCase(ignoreIdentifiersCase);
QueryContext.ParameterStyle(parameterStyle);
ChangeState(ConnectorState.Authenticated);
return true;
} catch (Exception e) {
// TODO: throw server error
throw;
}
}