You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

123 lines
3.0 KiB

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 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();
}
}
}