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,6 +33,20 @@ namespace bsmd.database
#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

View File

@ -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)
@ -724,6 +740,26 @@ namespace bsmd.database
{
List<DatabaseEntity> result = new List<DatabaseEntity>();
while(reader.Read())
{
result.Add(ReadRowFromReader(reader));
}
reader.Close();
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);
@ -770,10 +806,7 @@ namespace bsmd.database
if (!reader.IsDBNull(41)) core.Flags = reader.GetInt32(41);
if (!reader.IsDBNull(42)) core.POATA = reader.GetDateTime(42);
result.Add(core);
}
reader.Close();
return result;
return core;
}
#endregion