using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using FirebirdSql.Data.FirebirdClient;
|
|
using FireBirdUtil.SqlUtils;
|
|
using System.Diagnostics;
|
|
using System.Data;
|
|
|
|
namespace FireBirdUtil.SqlHelpers
|
|
{
|
|
public class SqlHelper : IDisposable
|
|
{
|
|
private string _Database;
|
|
private FbConnection _Connection;
|
|
private FbTransaction _Transaction;
|
|
public SqlHelper(string database)
|
|
{
|
|
#if DEBUG
|
|
if (string.IsNullOrEmpty(database))
|
|
throw new ArgumentException("构造函数参数不允许为空");
|
|
#endif
|
|
_Database = database;
|
|
CreateConnection();
|
|
}
|
|
|
|
~SqlHelper()
|
|
{
|
|
Dispose();
|
|
}
|
|
|
|
private FbConnection CreateConnection()
|
|
{
|
|
_Connection = new FbConnection(SQLExecuteUtil.GetConnectionString(_Database));
|
|
_Connection.Open();
|
|
return _Connection;
|
|
}
|
|
|
|
public FbTransaction CreateTransaction()
|
|
{
|
|
_Transaction = _Connection.BeginTransaction();
|
|
return _Transaction;
|
|
}
|
|
/// <summary>
|
|
/// 提交事务。注意:提交之后,事务就为空了
|
|
/// </summary>
|
|
public void Commit()
|
|
{
|
|
_Transaction.Commit();
|
|
}
|
|
/// <summary>
|
|
/// Rollback
|
|
/// </summary>
|
|
public void Rollback()
|
|
{
|
|
_Transaction.Rollback();
|
|
}
|
|
|
|
public void Insert(string tableName, IDictionary<string, object> fieldsValues)
|
|
{
|
|
new InsertHelper(_Database, _Connection, _Transaction).Insert(tableName, fieldsValues);
|
|
}
|
|
|
|
public void Delete(string tableName, string conditions)
|
|
{
|
|
new DeleteHelper(_Database, _Connection, _Transaction).Delete(tableName, conditions);
|
|
}
|
|
|
|
public void Update(string tableName, Dictionary<string, object> newValues, string conditions)
|
|
{
|
|
new UpdateHelper(_Database, _Connection, _Transaction).Update(tableName, newValues, conditions);
|
|
}
|
|
|
|
public TResult Query<TResult>(string sql, Func<object, TResult> DealResult)
|
|
{
|
|
return SqlExecuteBaseUtil.ExecuteScalar<TResult>(_Connection, _Transaction, sql, DealResult);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询当前id。主要用于事务中
|
|
/// </summary>
|
|
/// <param name="idVar">要查询的表的表名</param>
|
|
public long GetCurrentID(string tableName)
|
|
{
|
|
return Query<long>("SELECT GEN_ID(" + SqlUtil.GetGeneratorName(tableName) + ", 0) FROM RDB$DATABASE;", idStr => { return (long)idStr; });
|
|
}
|
|
|
|
public DataTable Query(string sql)
|
|
{
|
|
return SqlExecuteBaseUtil.ExecuteReader(_Connection, _Transaction, sql);
|
|
}
|
|
|
|
public void ExecuteNonQuery(string sql)
|
|
{
|
|
SqlExecuteBaseUtil.ExecuteNonQuery(_Connection, _Transaction, sql);
|
|
}
|
|
|
|
public void ExecuteNonQuery(string sql, out bool success)
|
|
{
|
|
string errorMessage;
|
|
ExecuteNonQuery(sql, out success, out errorMessage);
|
|
}
|
|
public string ExecuteNonQuery2(string sql, out bool success)
|
|
{
|
|
string errorMessage;
|
|
ExecuteNonQuery(sql, out success, out errorMessage);
|
|
return errorMessage;
|
|
}
|
|
|
|
public void ExecuteNonQuery(string sql, out bool success, out string errorMessage)
|
|
{
|
|
success = false;
|
|
errorMessage = string.Empty;
|
|
try {
|
|
ExecuteNonQuery(sql);
|
|
success = true;
|
|
} catch (Exception ex) {
|
|
success = false;
|
|
errorMessage = ex.ToString();
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (_Connection != null && _Connection.State == ConnectionState.Open)
|
|
_Connection.Close();
|
|
}
|
|
}
|
|
}
|