From a596e197e1bd293f138719818b29233dd0d68cca Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Thu, 9 Feb 2023 14:44:44 +0100 Subject: [PATCH] more work on async loading.. --- bsmd.database/DBManagerAsync.cs | 16 +++- bsmd.database/MessageCore.cs | 125 ++++++++++++++++++++------------ 2 files changed, 94 insertions(+), 47 deletions(-) diff --git a/bsmd.database/DBManagerAsync.cs b/bsmd.database/DBManagerAsync.cs index 304e85bf..90c56bc3 100644 --- a/bsmd.database/DBManagerAsync.cs +++ b/bsmd.database/DBManagerAsync.cs @@ -33,13 +33,27 @@ namespace bsmd.database #region public methods + #region convenience loading functions + + public static async Task> LoadMaerskCoresByIntervalAsync(Dictionary filterDict, bool loadXtraData = false) + { + SqlCommand cmd = new SqlCommand(); + MessageCore aMessageCore = new MessageCore(); + aMessageCore.PrepareLoadCommand(cmd, Message.LoadFilter.SEARCH_CORE_FILTERS, filterDict); + SqlDataReader reader = await PerformCommandAsync(cmd); + List result = await aMessageCore.LoadListAsync(reader); + return result; + } + + #endregion + #endregion #region async DB access methods - + internal static async Task PerformCommandAsync(SqlCommand cmd) { diff --git a/bsmd.database/MessageCore.cs b/bsmd.database/MessageCore.cs index 7601f683..1a395ae3 100644 --- a/bsmd.database/MessageCore.cs +++ b/bsmd.database/MessageCore.cs @@ -7,6 +7,7 @@ using System.Data.SqlClient; using System.Collections.Generic; using System.Text; using log4net; +using System.Threading.Tasks; namespace bsmd.database { @@ -466,6 +467,11 @@ namespace bsmd.database } public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + this.PrepareLoadCommand(cmd, filter, false, criteria); + } + + public void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, bool joinXtraData, params object[] criteria) { StringBuilder sb = new StringBuilder("SELECT "); if (this.ResultLimit > 0) @@ -492,8 +498,18 @@ namespace bsmd.database } } + if(joinXtraData) + { + sb.Append(", [XtraData].[Id], [XtraData].[Field1], "); // ist das so schlau? + } + sb.AppendFormat(" FROM {0} ", this.Tablename); + if(joinXtraData) + { + sb.AppendFormat(" LEFT JOIN XtraData ON [{0}].Id = [XtraData].[ReferenceId] ", this.Tablename); + } + this.SetFilters(sb, cmd, filter, criteria); bool latestIdSearch = false; if(filter == Message.LoadFilter.SEARCH_CORE_FILTERS) @@ -725,57 +741,74 @@ namespace bsmd.database List result = new List(); while(reader.Read()) { - MessageCore core = new MessageCore(); - core.id = reader.GetGuid(0); - if (!reader.IsDBNull(1)) core.VisitId = reader.GetString(1); - if (!reader.IsDBNull(2)) core.TransitId = reader.GetString(2); - if (!reader.IsDBNull(3)) core.IMO = reader.GetString(3); - if (!reader.IsDBNull(4)) core.ENI = reader.GetString(4); - if (!reader.IsDBNull(5)) core.PoC = reader.GetString(5); - if (!reader.IsDBNull(6)) core.Portname = reader.GetString(6); - if (!reader.IsDBNull(7)) core.ETA = reader.GetDateTime(7); - if (!reader.IsDBNull(8)) core.CustomerId = reader.GetGuid(8); - if (!reader.IsDBNull(9)) core.previous = reader.GetGuid(9); - if (!reader.IsDBNull(10)) core.next = reader.GetGuid(10); - core.IsTransit = reader.GetBoolean(11); - if (!reader.IsDBNull(12)) core.wetris_zz_56_datensatz_id = reader.GetInt32(12); - core.BSMDStatusInternal = (BSMDStatus) Enum.ToObject(typeof(BSMDStatus), reader.GetByte(13)); - core.InitialHIS = (Message.NSWProvider) Enum.ToObject(typeof(Message.NSWProvider), reader.GetByte(14)); - if (!reader.IsDBNull(15)) core.HerbergFormGuid = reader.GetGuid(15); - if (!reader.IsDBNull(16)) core.HerbergFormTemplateGuid = reader.GetGuid(16); - if (!reader.IsDBNull(17)) core.HerbergReportType = reader.GetString(17); - if (!reader.IsDBNull(18)) core.HerbergEmailContactReportingVessel = reader.GetString(18); - if (!reader.IsDBNull(19)) core.HerbergEmail24HrsContact = reader.GetString(19); - if (!reader.IsDBNull(20)) core.ETAKielCanal = reader.GetDateTime(20); - if (!reader.IsDBNull(21)) core.HerbergRevDate = reader.GetDateTime(21); - if (!reader.IsDBNull(22)) core.ReportStatus = (ReportStatusEnum) Enum.ToObject(typeof(ReportStatusEnum), reader.GetByte(22)); - if (!reader.IsDBNull(23)) core.SietasSheetVersion = reader.GetString(23); - if (!reader.IsDBNull(24)) core.Incoming = reader.GetBoolean(24); - if (!reader.IsDBNull(25)) core.DefaultReportingPartyId = reader.GetGuid(25); - if (!reader.IsDBNull(26)) core.created = reader.GetDateTime(26); - if (!reader.IsDBNull(27)) core.changed = reader.GetDateTime(27); - if (!reader.IsDBNull(28)) core.CreateExcel = reader.GetBoolean(28); - if (!reader.IsDBNull(29)) core.EditedBy = reader.GetString(29); - if (!reader.IsDBNull(30)) core.TicketNo = reader.GetString(30); - if (!reader.IsDBNull(31)) core.Cancelled = reader.GetBoolean(31); - if (!reader.IsDBNull(32)) core.VisitIdOrTransitIdCancellable = reader.GetBoolean(32); - if (!reader.IsDBNull(33)) core.BlockedNotificationClasses = reader.GetString(33); - if (!reader.IsDBNull(34)) core.FreeNotificationClasses = reader.GetString(34); - if (!reader.IsDBNull(35)) core.OwnNotificationClasses = reader.GetString(35); - if (!reader.IsDBNull(36)) core.StatusCheckErrorCode = reader.GetString(36); - if (!reader.IsDBNull(37)) core.StatusCheckErrorMessage = reader.GetString(37); - if (!reader.IsDBNull(38)) core.QueryNSWStatus = reader.GetBoolean(38); - if (!reader.IsDBNull(39)) core.ExcelImportComplete = reader.GetBoolean(39); - if (!reader.IsDBNull(40)) core.PONumber = reader.GetString(40); - if (!reader.IsDBNull(41)) core.Flags = reader.GetInt32(41); - if (!reader.IsDBNull(42)) core.POATA = reader.GetDateTime(42); - - result.Add(core); + result.Add(ReadRowFromReader(reader)); } reader.Close(); return result; } + public async Task> LoadListAsync(SqlDataReader reader) + { + List result = new List(); + + while (await reader.ReadAsync()) + { + result.Add(ReadRowFromReader(reader)); + } + reader.Close(); + return result; + } + + private MessageCore ReadRowFromReader(IDataReader reader) + { + MessageCore core = new MessageCore(); + core.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) core.VisitId = reader.GetString(1); + if (!reader.IsDBNull(2)) core.TransitId = reader.GetString(2); + if (!reader.IsDBNull(3)) core.IMO = reader.GetString(3); + if (!reader.IsDBNull(4)) core.ENI = reader.GetString(4); + if (!reader.IsDBNull(5)) core.PoC = reader.GetString(5); + if (!reader.IsDBNull(6)) core.Portname = reader.GetString(6); + if (!reader.IsDBNull(7)) core.ETA = reader.GetDateTime(7); + if (!reader.IsDBNull(8)) core.CustomerId = reader.GetGuid(8); + if (!reader.IsDBNull(9)) core.previous = reader.GetGuid(9); + if (!reader.IsDBNull(10)) core.next = reader.GetGuid(10); + core.IsTransit = reader.GetBoolean(11); + if (!reader.IsDBNull(12)) core.wetris_zz_56_datensatz_id = reader.GetInt32(12); + core.BSMDStatusInternal = (BSMDStatus)Enum.ToObject(typeof(BSMDStatus), reader.GetByte(13)); + core.InitialHIS = (Message.NSWProvider)Enum.ToObject(typeof(Message.NSWProvider), reader.GetByte(14)); + if (!reader.IsDBNull(15)) core.HerbergFormGuid = reader.GetGuid(15); + if (!reader.IsDBNull(16)) core.HerbergFormTemplateGuid = reader.GetGuid(16); + if (!reader.IsDBNull(17)) core.HerbergReportType = reader.GetString(17); + if (!reader.IsDBNull(18)) core.HerbergEmailContactReportingVessel = reader.GetString(18); + if (!reader.IsDBNull(19)) core.HerbergEmail24HrsContact = reader.GetString(19); + if (!reader.IsDBNull(20)) core.ETAKielCanal = reader.GetDateTime(20); + if (!reader.IsDBNull(21)) core.HerbergRevDate = reader.GetDateTime(21); + if (!reader.IsDBNull(22)) core.ReportStatus = (ReportStatusEnum)Enum.ToObject(typeof(ReportStatusEnum), reader.GetByte(22)); + if (!reader.IsDBNull(23)) core.SietasSheetVersion = reader.GetString(23); + if (!reader.IsDBNull(24)) core.Incoming = reader.GetBoolean(24); + if (!reader.IsDBNull(25)) core.DefaultReportingPartyId = reader.GetGuid(25); + if (!reader.IsDBNull(26)) core.created = reader.GetDateTime(26); + if (!reader.IsDBNull(27)) core.changed = reader.GetDateTime(27); + if (!reader.IsDBNull(28)) core.CreateExcel = reader.GetBoolean(28); + if (!reader.IsDBNull(29)) core.EditedBy = reader.GetString(29); + if (!reader.IsDBNull(30)) core.TicketNo = reader.GetString(30); + if (!reader.IsDBNull(31)) core.Cancelled = reader.GetBoolean(31); + if (!reader.IsDBNull(32)) core.VisitIdOrTransitIdCancellable = reader.GetBoolean(32); + if (!reader.IsDBNull(33)) core.BlockedNotificationClasses = reader.GetString(33); + if (!reader.IsDBNull(34)) core.FreeNotificationClasses = reader.GetString(34); + if (!reader.IsDBNull(35)) core.OwnNotificationClasses = reader.GetString(35); + if (!reader.IsDBNull(36)) core.StatusCheckErrorCode = reader.GetString(36); + if (!reader.IsDBNull(37)) core.StatusCheckErrorMessage = reader.GetString(37); + if (!reader.IsDBNull(38)) core.QueryNSWStatus = reader.GetBoolean(38); + if (!reader.IsDBNull(39)) core.ExcelImportComplete = reader.GetBoolean(39); + if (!reader.IsDBNull(40)) core.PONumber = reader.GetString(40); + if (!reader.IsDBNull(41)) core.Flags = reader.GetInt32(41); + if (!reader.IsDBNull(42)) core.POATA = reader.GetDateTime(42); + + return core; + } + #endregion #region public methods