using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FirebirdSql.Data.FirebirdClient;
using System.IO;
using System.Runtime.InteropServices;
namespace FireBirdUtil.SqlUtils
{
public static class SQLExecuteUtil
{
///
/// 向指定数据库的指定表中,插入一条数据。
/// 数据的Key为字段,Value为字段对应的值
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
/// 表名
/// 一条数据的信息
public static void Insert(string database, string tableName, IDictionary fieldsValues)
{
var insertSql = SqlUtil.GetInsertSql(tableName, fieldsValues);
using (FbConnection conn = new FbConnection(GetConnectionString(database))) {
conn.Open();
SqlExecuteBaseUtil.ExecuteNonQuery(conn, null, insertSql);
}
}
///
/// 删除符合条件的数据
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
/// 表名
/// 以where打头的条件
public static void Delete(string database, string tableName, string conditions)
{
var deleteSql = SqlUtil.GetDeleteSql(tableName, conditions);
using (FbConnection conn = new FbConnection(GetConnectionString(database))) {
conn.Open();
SqlExecuteBaseUtil.ExecuteNonQuery(conn, null, deleteSql);
}
}
///
/// 更新符合条件的数据
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
/// 表名
/// 新值:Key为字段名,Value为新值
/// 以where打头的条件
public static void Update(string database, string tableName, Dictionary newValues, string conditions)
{
var updateSql = SqlUtil.GetUpdateSql(tableName, newValues, conditions);
using (FbConnection conn = new FbConnection(GetConnectionString(database))) {
conn.Open();
SqlExecuteBaseUtil.ExecuteNonQuery(conn, null, updateSql);
}
}
///
/// 数据库是否存在
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
public static bool IsDatabaseExist(string database)
{
return File.Exists(database);
}
///
/// 如果指定数据库中,不存在指定的表,则根据创建表的参数,创建之
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
/// 表名
/// 创建表的字段的相关参数信息
public static void CreateTableIfNotExist(string database, string tableName, string tableParams)
{
if (IsTableExist(database, tableName))
return;
CreateTable(database, tableName, tableParams);
}
///
/// 在指定数据库中,判断表是否存在
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
/// 表名
public static bool IsTableExist(string database, string tableName)
{
bool exist = false;
using (FbConnection conn = new FbConnection(GetConnectionString(database))) {
conn.Open();
exist = SqlExecuteBaseUtil.ExecuteScalar(conn, null, 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;
});
}
return exist;
}
///
/// 在指定数据库中,创建数据表
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
/// 表名
/// 创建表的字段的相关参数信息
public static void CreateTable(string database, string tableName, string tableParams)
{
FbConnection cn = new FbConnection(GetConnectionString(database));
cn.Open();
string strSQL = SqlUtil.GetCreateTableSql(tableName, tableParams);
SqlExecuteBaseUtil.ExecuteNonQuery(cn, null, strSQL);
cn.Close();
}
///
/// 如果数据库不存在,则创建数据库
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
public static void CreateDataBaseIfNotExist(string database)
{
if (!File.Exists(database))
FbConnection.CreateDatabase(GetConnectionString(database));
}
///
/// 获取连接字符串
///
/// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
public static string GetConnectionString(string database)
{
FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
cs.Database = database;
cs.UserID = "SYSDBA";
cs.Password = "masterkey";
cs.Charset = "UTF8";
cs.ServerType = FbServerType.Embedded;
return cs.ToString();
}
#region 注销的代码:插入数据。注销原因:要求数据的顺序与数据表的顺序一致
/////
///// 向指定数据库的指定表中,插入一条数据。
///// fields为字段,values为与字段对应的值
/////
///// 数据库名(在fbembed.dll所在目录;或者是绝对路径+数据库名)
///// 表名
///// 一条数据的字段信息,与值信息一一对应
///// 一条数据的值信息,与字段信息一一对应
//public static void Insert(string database, string tableName, IList fields, IList