private static XSafeScalarQuery ( |
||
connDesc | The database connection descriptor. This is used both as /// a key for caching connections/commands as well as for /// getting the actual database connection the first time. | |
transaction | SqlTransaction | The transaction to do this as part of. |
sql | string | The SQL query to execute. |
sqlParams | IEnumerable | A list of objects to use as parameters /// to the SQL statement. The list may be /// null if there are no parameters. |
return | object |
private static object XSafeScalarQuery(AbstractSqlConnectionDescriptor connDesc,
SqlTransaction transaction, string sql, IEnumerable sqlParams)
{
object retVal;
IDbConnection conn = transaction != null
? transaction.Connection
: DbCaches.Connections.Get(connDesc);
try
{
IDbCommand cmd = DbCaches.Commands.Get(sql, conn);
if (transaction != null)
{
cmd.Transaction = transaction.Transaction;
}
try
{
SetSQLOnCommand(connDesc, cmd, sql, sqlParams);
try
{
retVal = cmd.ExecuteScalar();
}
catch (Exception e)
{
throw new UnableToRunSqlException(connDesc, sql, sqlParams, e);
}
}
finally
{
DbCaches.Commands.Return(sql, conn, cmd);
}
}
finally
{
if (transaction == null)
{
DbCaches.Connections.Return(connDesc, conn);
}
}
return retVal;
}