more work on async loading..

This commit is contained in:
Daniel Schick 2023-02-09 14:44:44 +01:00
parent 6d07baa4b0
commit a596e197e1
2 changed files with 94 additions and 47 deletions

View File

@ -33,13 +33,27 @@ namespace bsmd.database
#region public methods #region public methods
#region convenience loading functions
public static async Task<List<MessageCore>> LoadMaerskCoresByIntervalAsync(Dictionary<MessageCore.SearchFilterType, string> 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<MessageCore> result = await aMessageCore.LoadListAsync(reader);
return result;
}
#endregion
#endregion #endregion
#region async DB access methods #region async DB access methods
internal static async Task<SqlDataReader> PerformCommandAsync(SqlCommand cmd) internal static async Task<SqlDataReader> PerformCommandAsync(SqlCommand cmd)
{ {

View File

@ -7,6 +7,7 @@ using System.Data.SqlClient;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using log4net; using log4net;
using System.Threading.Tasks;
namespace bsmd.database namespace bsmd.database
{ {
@ -466,6 +467,11 @@ namespace bsmd.database
} }
public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) 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 "); StringBuilder sb = new StringBuilder("SELECT ");
if (this.ResultLimit > 0) 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); 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); this.SetFilters(sb, cmd, filter, criteria);
bool latestIdSearch = false; bool latestIdSearch = false;
if(filter == Message.LoadFilter.SEARCH_CORE_FILTERS) if(filter == Message.LoadFilter.SEARCH_CORE_FILTERS)
@ -725,57 +741,74 @@ namespace bsmd.database
List<DatabaseEntity> result = new List<DatabaseEntity>(); List<DatabaseEntity> result = new List<DatabaseEntity>();
while(reader.Read()) while(reader.Read())
{ {
MessageCore core = new MessageCore(); result.Add(ReadRowFromReader(reader));
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);
} }
reader.Close(); reader.Close();
return result; return result;
} }
public async Task<List<MessageCore>> LoadListAsync(SqlDataReader reader)
{
List<MessageCore> result = new List<MessageCore>();
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 #endregion
#region public methods #region public methods