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.

98 lines
3.8 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FirebirdSql.Data.FirebirdClient;
namespace FireBirdUtil.SqlUtils
{
public static class SQLExecuteUtil_Transaction
{//TODO:是否增加方法:用FbCommand参数,替代FbConnection参数的方法
/// <summary>
/// 在事务中:插入数据
/// </summary>
/// <param name="conn">连接.在调用该方法之前,应该已打开</param>
/// <param name="tr">事务</param>
/// <param name="tableName">表名</param>
/// <param name="fieldsValues">一条数据的信息</param>
public static void Insert(FbConnection conn, FbTransaction tr, string tableName, IDictionary<string, object> fieldsValues)
{
var insertSql = SqlUtil.GetInsertSql(tableName, fieldsValues);
SqlExecuteBaseUtil.ExecuteNonQuery(conn, tr, insertSql);
}
/// <summary>
/// 在事务中:删除符合条件的数据
/// </summary>
/// <param name="conn">连接.在调用该方法之前,应该已打开</param>
/// <param name="tr">事务</param>
/// <param name="tableName">表名</param>
/// <param name="conditions">以where打头的条件</param>
public static void Delete(FbConnection conn, FbTransaction tr, string tableName, string conditions)
{
var deleteSql = SqlUtil.GetDeleteSql(tableName, conditions);
SqlExecuteBaseUtil.ExecuteNonQuery(conn, tr, deleteSql);
}
/// <summary>
/// 在事务中:更新符合条件的数据
/// </summary>
/// <param name="conn">连接.在调用该方法之前,应该已打开</param>
/// <param name="tr">事务</param>
/// <param name="tableName">表名</param>
/// <param name="newValues">新值:Key为字段名,Value为新值</param>
/// <param name="conditions">以where打头的条件</param>
public static void Update(FbConnection conn, FbTransaction tr, string tableName, Dictionary<string, object> newValues, string conditions)
{
var updateSql = SqlUtil.GetUpdateSql(tableName, newValues, conditions);
SqlExecuteBaseUtil.ExecuteNonQuery(conn, tr, updateSql);
}
/// <summary>
/// 在事务中:如果指定数据库中,不存在指定的表,则根据创建表的参数,创建之
/// </summary>
/// <param name="conn">连接.在调用该方法之前,应该已打开</param>
/// <param name="tr">事务</param>
/// <param name="tableName">表名</param>
/// <param name="tableParams">创建表的字段的相关参数信息</param>
public static void CreateTableIfNotExist(FbConnection conn, FbTransaction tr, string tableName, string tableParams)
{
if (IsTableExist(conn, tr, tableName))
return;
CreateTable(conn, tr, tableName, tableParams);
}
/// <summary>
/// 在事务中:在指定数据库中,判断表是否存在
/// </summary>
/// <param name="conn">连接.在调用该方法之前,应该已打开</param>
/// <param name="tr">事务</param>
/// <param name="tableName">表名</param>
public static bool IsTableExist(FbConnection conn, FbTransaction tr, string tableName)
{
return SqlExecuteBaseUtil.ExecuteScalar<bool>(conn, tr, SqlUtil.GetJudgeTableExistSql(tableName), obj => {
int count = 0;
if (obj.Equals(null) || obj.Equals(System.DBNull.Value)) {
count = -1;
} else {
count = (int)obj;
}
return count > 0;
});
}
/// <summary>
/// 在事务中:在指定数据库中,创建数据表
/// </summary>
/// <param name="conn">连接.在调用该方法之前,应该已打开</param>
/// <param name="tr">事务</param>
/// <param name="tableName">表名</param>
/// <param name="tableParams">创建表的字段的相关参数信息</param>
public static void CreateTable(FbConnection conn, FbTransaction tr, string tableName, string tableParams)
{
string strSQL = SqlUtil.GetCreateTableSql(tableName, tableParams);
SqlExecuteBaseUtil.ExecuteNonQuery(conn, tr, strSQL);
}
}
}