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; } /// /// 提交事务。注意:提交之后,事务就为空了 /// public void Commit() { _Transaction.Commit(); } /// /// Rollback /// public void Rollback() { _Transaction.Rollback(); } public void Insert(string tableName, IDictionary 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 newValues, string conditions) { new UpdateHelper(_Database, _Connection, _Transaction).Update(tableName, newValues, conditions); } public TResult Query(string sql, Func DealResult) { return SqlExecuteBaseUtil.ExecuteScalar(_Connection, _Transaction, sql, DealResult); } /// /// 查询当前id。主要用于事务中 /// /// 要查询的表的表名 public long GetCurrentID(string tableName) { return Query("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(); } } }