From 562658bc6280bacf3c0b12ac4afc9e6b6cbaf157 Mon Sep 17 00:00:00 2001 From: milimoe Date: Thu, 14 Nov 2024 22:40:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=20.NET=209=EF=BC=9B=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=20SQLite=20=E5=88=9D=E5=A7=8B=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FunGame.Implement/FunGame.Implement.csproj | 2 +- FunGame.Server/FunGame.Server.csproj | 2 +- FunGame.Server/Others/FunGameSystem.cs | 5 +++ FunGame.Server/Utilities/ConnectProperties.cs | 2 +- FunGame.Server/Utilities/MySQL/MySQLHelper.cs | 4 ++- .../Utilities/SQLite/SQLiteHelper.cs | 36 ++++++++++++++++++- FunGame.WebAPI/FunGame.WebAPI.csproj | 2 +- FunGame.WebAPI/Program.cs | 15 +++----- 8 files changed, 51 insertions(+), 17 deletions(-) diff --git a/FunGame.Implement/FunGame.Implement.csproj b/FunGame.Implement/FunGame.Implement.csproj index 3a83072..460da5e 100644 --- a/FunGame.Implement/FunGame.Implement.csproj +++ b/FunGame.Implement/FunGame.Implement.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 enable enable ..\bin diff --git a/FunGame.Server/FunGame.Server.csproj b/FunGame.Server/FunGame.Server.csproj index 0fa6df9..f77fd92 100644 --- a/FunGame.Server/FunGame.Server.csproj +++ b/FunGame.Server/FunGame.Server.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net9.0 enable enable logo.ico diff --git a/FunGame.Server/Others/FunGameSystem.cs b/FunGame.Server/Others/FunGameSystem.cs index 6c2dd77..1d517e3 100644 --- a/FunGame.Server/Others/FunGameSystem.cs +++ b/FunGame.Server/Others/FunGameSystem.cs @@ -204,6 +204,11 @@ namespace Milimoe.FunGame.Server.Others public static void AfterCreateSQLService(SQLHelper sqlHelper) { Config.SQLMode = sqlHelper.Mode; + if (sqlHelper is SQLiteHelper sqliteHelper && !sqliteHelper.DatabaseExists()) + { + ServerHelper.WriteLine("正在初始化数据库 . . .", InvokeMessageType.Core); + sqliteHelper.ExecuteSqlFile(AppDomain.CurrentDomain.BaseDirectory + "fungame_sqlite.sql"); + } ServerLogin(sqlHelper); ClearRoomList(sqlHelper); sqlHelper.Dispose(); diff --git a/FunGame.Server/Utilities/ConnectProperties.cs b/FunGame.Server/Utilities/ConnectProperties.cs index 0cd08ee..840d274 100644 --- a/FunGame.Server/Utilities/ConnectProperties.cs +++ b/FunGame.Server/Utilities/ConnectProperties.cs @@ -46,7 +46,7 @@ namespace Milimoe.FunGame.Server.Utility } else ServerHelper.Error(new SQLServiceException()); } - return "data source=" + DataSource; + return $"data source={AppDomain.CurrentDomain.BaseDirectory}" + DataSource; } } } diff --git a/FunGame.Server/Utilities/MySQL/MySQLHelper.cs b/FunGame.Server/Utilities/MySQL/MySQLHelper.cs index da5c40e..f48ae18 100644 --- a/FunGame.Server/Utilities/MySQL/MySQLHelper.cs +++ b/FunGame.Server/Utilities/MySQL/MySQLHelper.cs @@ -80,7 +80,6 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility /// /// /// - /// public override int Execute(string script) { bool localTransaction = _transaction == null; @@ -92,6 +91,7 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility NewTransaction(); } OpenConnection(); + Script = script; ServerHelper.WriteLine("SQLQuery -> " + script, InvokeMessageType.Api); using MySqlCommand command = new(script, _connection); command.CommandType = CommandType; @@ -139,6 +139,7 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility NewTransaction(); } OpenConnection(); + Script = script; ServerHelper.WriteLine("SQLQuery -> " + script, InvokeMessageType.Api); using MySqlCommand command = new(script, _connection) @@ -150,6 +151,7 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility { SelectCommand = command }; + _dataSet = new(); adapter.Fill(_dataSet); if (localTransaction) Commit(); diff --git a/FunGame.Server/Utilities/SQLite/SQLiteHelper.cs b/FunGame.Server/Utilities/SQLite/SQLiteHelper.cs index d628713..b4f8ea8 100644 --- a/FunGame.Server/Utilities/SQLite/SQLiteHelper.cs +++ b/FunGame.Server/Utilities/SQLite/SQLiteHelper.cs @@ -78,7 +78,6 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility /// /// /// - /// public override int Execute(string script) { bool localTransaction = _transaction == null; @@ -90,6 +89,7 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility NewTransaction(); } OpenConnection(); + Script = script; ServerHelper.WriteLine("SQLQuery -> " + script, InvokeMessageType.Api); using SqliteCommand command = new(script, _connection); command.CommandType = CommandType; @@ -138,6 +138,7 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility NewTransaction(); } OpenConnection(); + Script = script; ServerHelper.WriteLine("SQLQuery -> " + script, InvokeMessageType.Api); using SqliteCommand command = new(script, _connection) { @@ -211,6 +212,39 @@ namespace Milimoe.FunGame.Server.Utility.DataUtility } } + /// + /// 检查数据库是否存在 + /// + /// + public bool DatabaseExists() + { + return File.Exists(ServerInfo.SQLServerDataBase); + } + + /// + /// 执行SQL文件中的所有SQL语句来初始化数据库 + /// + /// SQL文件路径 + public void ExecuteSqlFile(string sqlFilePath) + { + if (!File.Exists(sqlFilePath)) + { + throw new FileNotFoundException("SQL文件不存在", sqlFilePath); + } + + string sqlContent = File.ReadAllText(sqlFilePath); + string[] sqlCommands = sqlContent.Split([";"], StringSplitOptions.RemoveEmptyEntries); + + foreach (string commandText in sqlCommands) + { + string sql = commandText.Trim(); + if (!string.IsNullOrEmpty(sql)) + { + Execute(sql); + } + } + } + private bool _isDisposed = false; /// diff --git a/FunGame.WebAPI/FunGame.WebAPI.csproj b/FunGame.WebAPI/FunGame.WebAPI.csproj index c490edb..f21b681 100644 --- a/FunGame.WebAPI/FunGame.WebAPI.csproj +++ b/FunGame.WebAPI/FunGame.WebAPI.csproj @@ -1,7 +1,7 @@  - net8.0 + net9.0 enable enable Milimoe.$(MSBuildProjectName.Replace(" ", "_")) diff --git a/FunGame.WebAPI/Program.cs b/FunGame.WebAPI/Program.cs index 428f38d..165429c 100644 --- a/FunGame.WebAPI/Program.cs +++ b/FunGame.WebAPI/Program.cs @@ -103,17 +103,10 @@ try options.JsonSerializerOptions.WriteIndented = true; options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; - options.JsonSerializerOptions.Converters.Add(new DateTimeConverter()); - options.JsonSerializerOptions.Converters.Add(new DataTableConverter()); - options.JsonSerializerOptions.Converters.Add(new DataSetConverter()); - options.JsonSerializerOptions.Converters.Add(new UserConverter()); - options.JsonSerializerOptions.Converters.Add(new RoomConverter()); - options.JsonSerializerOptions.Converters.Add(new CharacterConverter()); - options.JsonSerializerOptions.Converters.Add(new MagicResistanceConverter()); - options.JsonSerializerOptions.Converters.Add(new EquipSlotConverter()); - options.JsonSerializerOptions.Converters.Add(new SkillConverter()); - options.JsonSerializerOptions.Converters.Add(new EffectConverter()); - options.JsonSerializerOptions.Converters.Add(new ItemConverter()); + foreach (JsonConverter converter in JsonTool.JsonSerializerOptions.Converters) + { + options.JsonSerializerOptions.Converters.Add(converter); + } }); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer();