using System.Data; using Milimoe.FunGame.Core.Interface.Base; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Model; namespace Milimoe.FunGame.Core.Api.Transmittal { /// /// 需要在Server中继承此类实现 /// public abstract class SQLHelper : ISQLHelper, IDisposable { public abstract FunGameInfo.FunGame FunGameType { get; } public abstract SQLMode Mode { get; } public abstract string Script { get; set; } public abstract CommandType CommandType { get; set; } public abstract SQLResult Result { get; } public abstract SQLServerInfo ServerInfo { get; } public abstract int UpdateRows { get; } public abstract DataSet DataSet { get; } public abstract Dictionary Parameters { get; } public bool Success => Result == SQLResult.Success; public bool ClearParametersAfterExecute { get; set; } = true; /// /// 执行一个命令 /// /// 影响的行数 public abstract int Execute(); /// /// 执行一个指定的命令 /// /// 命令 /// 影响的行数 public abstract int Execute(string script); /// /// 查询DataSet /// /// 结果集 public abstract DataSet ExecuteDataSet(); /// /// 执行指定的命令查询DataSet /// /// 命令 /// 结果集 public abstract DataSet ExecuteDataSet(string script); /// /// 执行指定的命令查询DataRow(可选实现) /// /// 结果行 public virtual DataRow? ExecuteDataRow() { return ExecuteDataRow(Script); } /// /// 执行指定的命令查询DataRow(可选实现) /// /// 命令 /// 结果行 public virtual DataRow? ExecuteDataRow(string script) { DataSet dataSet = ExecuteDataSet(script); if (dataSet.Tables.Count > 0 && dataSet.Tables[0].Rows.Count > 0) { return dataSet.Tables[0].Rows[0]; } return null; } /// /// 查询数据库是否存在 /// /// public abstract bool DatabaseExists(); /// /// 执行一个 sql 脚本文件 /// /// public virtual void ExecuteSqlFile(string path) { if (!File.Exists(path)) { throw new FileNotFoundException("SQL 脚本文件不存在", path); } string content = File.ReadAllText(path); string[] commands = content.Split([";"], StringSplitOptions.RemoveEmptyEntries); foreach (string command in commands) { string sql = command.Trim(); if (!string.IsNullOrEmpty(sql)) { Execute(sql); } } } /// /// 关闭连接 /// public abstract void Close(); /// /// 创建一个SQL事务 /// public abstract void NewTransaction(); /// /// 提交事务 /// public abstract void Commit(); /// /// 回滚事务 /// public abstract void Rollback(); /// /// 释放资源 /// public abstract void Dispose(); } }