From 6d07baa4b006b708d59cd1b2366a918c566760ea Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Thu, 9 Feb 2023 09:02:06 +0100 Subject: [PATCH] WIP, import works now --- ENI2/Controls/MaerskListControl.xaml | 49 ++++-- ENI2/Controls/MaerskListControl.xaml.cs | 98 ++++++++---- SQL/table.XtraData.eni.7.9.sql | 30 ++++ bsmd.database/DBManager.cs | 50 +----- bsmd.database/DBManagerAsync.cs | 134 ++++++++++++++++ bsmd.database/DatabaseEntity.cs | 4 +- bsmd.database/Extensions.cs | 14 +- bsmd.database/MaerskData.cs | 198 ++++++++++++++++++++++++ bsmd.database/MessageCore.cs | 12 +- bsmd.database/bsmd.database.csproj | 2 + 10 files changed, 488 insertions(+), 103 deletions(-) create mode 100644 SQL/table.XtraData.eni.7.9.sql create mode 100644 bsmd.database/DBManagerAsync.cs create mode 100644 bsmd.database/MaerskData.cs diff --git a/ENI2/Controls/MaerskListControl.xaml b/ENI2/Controls/MaerskListControl.xaml index acb952e8..4369abde 100644 --- a/ENI2/Controls/MaerskListControl.xaml +++ b/ENI2/Controls/MaerskListControl.xaml @@ -46,20 +46,45 @@ + SelectionMode="Extended" AutoGenerateColumns="False" CellEditEnding="dataGridPOCores_CellEditEnding" CanUserAddRows="False"> + + + - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/ENI2/Controls/MaerskListControl.xaml.cs b/ENI2/Controls/MaerskListControl.xaml.cs index 648cf13e..f085d15e 100644 --- a/ENI2/Controls/MaerskListControl.xaml.cs +++ b/ENI2/Controls/MaerskListControl.xaml.cs @@ -15,6 +15,7 @@ using System.Runtime.InteropServices; using bsmd.database; using ExcelDataReader; +using System.Collections.ObjectModel; namespace ENI2.Controls { @@ -28,6 +29,8 @@ namespace ENI2.Controls private List searchResult = new List(); private readonly List filteredResult = new List(); + private readonly ObservableCollection maerskDataList = new ObservableCollection(); + private const uint MAX_EMPTY_ROWS_ON_IMPORT = 3; // import breaks if more than this count of empty rows have been read #endregion @@ -47,11 +50,12 @@ namespace ENI2.Controls private void POList_Loaded(object sender, RoutedEventArgs e) { - + dataGridPOCores.ItemsSource = maerskDataList; } private void dataGridPOCores_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { + /* if (e.EditAction == DataGridEditAction.Commit) { if (e.Column == gridColumnPONumber) @@ -103,8 +107,9 @@ namespace ENI2.Controls el.Text = string.Empty; e.Cancel = true; } - } + } } + */ } #endregion @@ -136,7 +141,22 @@ namespace ENI2.Controls this.dataGridPOCores.SelectedItem = null; this.filteredResult.AddRange(searchResult); - this.dataGridPOCores.ItemsSource = this.filteredResult; + + } + + private string ReadFieldAsString(IExcelDataReader reader, int fieldNum) + { + if (fieldNum >= reader.FieldCount) return null; + if (reader.GetFieldType(fieldNum) == typeof(string)) + return reader.GetString(fieldNum).Clean(); + if (reader.GetFieldType(fieldNum) == typeof(DateTime)) + return reader.GetDateTime(fieldNum).ToString(); + if (reader.GetFieldType(fieldNum) == typeof(int)) + return reader.GetInt32(fieldNum).ToString(); + if (reader.GetFieldType(fieldNum) == typeof(double)) + return ((int) reader.GetDouble(fieldNum)).ToString(); + Type theType = reader.GetFieldType(fieldNum); + return null; } #endregion @@ -160,7 +180,7 @@ namespace ENI2.Controls FileStream stream; try { - stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); + stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.Read); } catch (Exception ex) { @@ -170,40 +190,40 @@ namespace ENI2.Controls using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream)) { - List importCores = new List(); + List importData = new List(); + uint emptyRowCnt = 0; try { - do + while (reader.Read()) { - while (reader.Read()) + if (reader.FieldCount < 13) { - if (reader.FieldCount < 13) - { - throw new InvalidDataException("Sheet must have 13 columns of data"); - } - MessageCore core = new MessageCore(); - if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue; - /* - if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0).Clean(); - - if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue; - if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1).Clean(); - if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2)); - if (!reader.IsDBNull(3)) crew.CrewMemberDuty = reader.GetString(3).Clean(); - if (!reader.IsDBNull(4)) crew.CrewMemberNationality = reader.GetString(4).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5).Clean(); - if (!reader.IsDBNull(6)) crew.CrewMemberCountryOfBirth = reader.GetString(6).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(7)) crew.CrewMemberDateOfBirth = reader.GetDateTime(7); - if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(8)); - if (!reader.IsDBNull(9)) crew.CrewMemberIdentityDocumentId = this.getValueAsString(reader, 9).Clean(); - if (!reader.IsDBNull(10)) crew.CrewMemberIdentityDocumentIssuingState = reader.GetString(10).Substring(0, 2).ToUpper(); - if (!reader.IsDBNull(11)) crew.CrewMemberIdentityDocumentExpiryDate = reader.GetDateTime(11); - if (!reader.IsDBNull(12)) crew.CrewMemberVisaNumber = this.getValueAsString(reader, 12).Clean(); - */ - importCores.Add(core); + throw new InvalidDataException("Sheet must have 13 columns of data"); } - } while (reader.NextResult()); + + MaerskData md = new MaerskData(); + md.ColA = ReadFieldAsString(reader, 0); + if (!reader.IsDBNull(1)) md.ColB = ReadFieldAsString(reader, 1); + if (!reader.IsDBNull(2)) md.ColC = ReadFieldAsString(reader, 2); + if (!reader.IsDBNull(3)) md.ColD = ReadFieldAsString(reader, 3); + if (!reader.IsDBNull(4)) md.ColE = ReadFieldAsString(reader, 4); + if (!reader.IsDBNull(5)) md.ColF = ReadFieldAsString(reader, 5); + if (!reader.IsDBNull(6)) md.ColG = ReadFieldAsString(reader, 6); + if (!reader.IsDBNull(7)) md.ColH = ReadFieldAsString(reader, 7); + if (!reader.IsDBNull(8)) md.ColI = ReadFieldAsString(reader, 8); + if (!reader.IsDBNull(9)) md.ColJ = ReadFieldAsString(reader, 9); + if (!reader.IsDBNull(10)) { md.ETA = reader.GetDateTime(10); md.ColK = md.ETA.ToString(); } + if (!reader.IsDBNull(11)) md.ColL = ReadFieldAsString(reader, 11); + if (!reader.IsDBNull(12)) md.ColM = ReadFieldAsString(reader, 12); + if (!reader.IsDBNull(13)) md.Remark = ReadFieldAsString(reader, 13); + + if (!md.ColF.IsNullOrEmpty()) // only add this if IMO is set + importData.Add(md); + else + emptyRowCnt++; + if (emptyRowCnt > MAX_EMPTY_ROWS_ON_IMPORT) break; + } } catch (Exception ex) { @@ -211,11 +231,21 @@ namespace ENI2.Controls } // we only want cores for the next 3 days - if (importCores.Count > 0) + if (importData.Count > 0) { - + // TODO: find matching message cores.. } + + // sort + // importData.Sort((x, y) => DateTime.Compare(x.ETA ?? DateTime.MaxValue, y.ETA ?? DateTime.MaxValue)); + + // merge the result into our grid data source list + // TODO + + foreach (MaerskData md in importData) + maerskDataList.Add(md); + this.dataGridPOCores.Items.Refresh(); } stream.Close(); diff --git a/SQL/table.XtraData.eni.7.9.sql b/SQL/table.XtraData.eni.7.9.sql new file mode 100644 index 00000000..53dec4f1 --- /dev/null +++ b/SQL/table.XtraData.eni.7.9.sql @@ -0,0 +1,30 @@ +CREATE TABLE [dbo].[XtraData] +( + [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, + [ParentId] UNIQUEIDENTIFIER NULL, + [ReferenceId] UNIQUEIDENTIFIER NOT NULL, + [Field1] NVARCHAR(100) NULL, + [Field2] NVARCHAR(100) NULL, + [Field3] NVARCHAR(100) NULL, + [Field4] NVARCHAR(100) NULL, + [Field5] NVARCHAR(100) NULL, + [Field6] NVARCHAR(100) NULL, + [Field7] NVARCHAR(100) NULL, + [Field8] NVARCHAR(100) NULL, + [Field9] NVARCHAR(100) NULL, + [Field10] NVARCHAR(100) NULL, + [Field11] NVARCHAR(100) NULL, + [Field12] NVARCHAR(100) NULL, + [Field13] NVARCHAR(100) NULL, + [Field14] NVARCHAR(100) NULL, + [Field15] NVARCHAR(100) NULL, + [Field16] NVARCHAR(100) NULL, + [Field17] NVARCHAR(100) NULL, + [Field18] NVARCHAR(100) NULL, + [Field19] NVARCHAR(100) NULL, + [Field20] NVARCHAR(100) NULL +) + +GO + +CREATE INDEX [IX_XtraData_RefId] ON [dbo].[XtraData] ([ReferenceId]) diff --git a/bsmd.database/DBManager.cs b/bsmd.database/DBManager.cs index b10acfb1..35dded31 100644 --- a/bsmd.database/DBManager.cs +++ b/bsmd.database/DBManager.cs @@ -29,12 +29,11 @@ namespace bsmd.database private static DBManager _instance; private static readonly ILog _log = LogManager.GetLogger(typeof(DBManager)); private static Dictionary allReportingParties; - private static Dictionary allPortAreas; + private static Dictionary allPortAreas; private readonly object _lock = new object(); private bool _closeConnectionAfterUse = false; private readonly List truncatedFieldCollection = new List(); private Dictionary messageHistoryTypeDict; - private readonly SemaphoreSlim _asyncSemaphore = new SemaphoreSlim(1); #endregion @@ -802,14 +801,7 @@ namespace bsmd.database if ((this._con == null) || (this._con.State == ConnectionState.Closed)) this.Connect(this.ConnectionString); - } - - private async Task CheckConnectionAsync() - { - if ((this._con == null) || - (this._con.State == ConnectionState.Closed)) - await this.ConnectAsync(this.ConnectionString); - } + } private void LogNonQueryResult(string query, int queryResult) { @@ -1620,7 +1612,7 @@ namespace bsmd.database { this.CheckConnection(); cmd.Connection = this._con; - result = (bool?)cmd.ExecuteScalar(); + result = (bool?)cmd.ExecuteScalar(); } catch (SqlException ex) { @@ -1688,41 +1680,7 @@ namespace bsmd.database } } - #endregion - - #region async DB access methods - - internal async Task PerformCommandAsync(SqlCommand cmd) - { - SqlDataReader reader = null; - - await _asyncSemaphore.WaitAsync(); - try - { - await this.CheckConnectionAsync(); - cmd.Connection = this._con; - reader = await cmd.ExecuteReaderAsync(); - } - catch (SqlException ex) - { - Trace.WriteLine("SQL Exception:" + ex.Message); - _log.Error("Error performing command", ex); - _log.DebugFormat("Query: {0}", cmd.CommandText); - _log.Debug("Parameters:"); - for (int i = 0; i < cmd.Parameters.Count; i++) - { - _log.DebugFormat("{0}:{1}", cmd.Parameters[i].ParameterName, cmd.Parameters[i].Value); - } - } - finally - { - _asyncSemaphore.Release(); - } - - return reader; - } - - #endregion + #endregion #endregion diff --git a/bsmd.database/DBManagerAsync.cs b/bsmd.database/DBManagerAsync.cs new file mode 100644 index 00000000..304e85bf --- /dev/null +++ b/bsmd.database/DBManagerAsync.cs @@ -0,0 +1,134 @@ +// Copyright (c) 2020-present schick Informatik +// Description: The new and mighty DB manager that uses async methods and +// connection pooling.. will try it out in Maersk/PO numbers and expand over the whole +// app later + +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +using log4net; + +namespace bsmd.database +{ + public static class DBManagerAsync + { + #region Fields + + private static ILog _log = LogManager.GetLogger(typeof(DBManagerAsync)); + private static readonly SemaphoreSlim _asyncSemaphore = new SemaphoreSlim(1); + + #endregion + + #region Properties + + public static string ConnectionString { get; set; } + + #endregion + + #region public methods + + + + #endregion + + #region async DB access methods + + + + internal static async Task PerformCommandAsync(SqlCommand cmd) + { + SqlDataReader reader = null; + + // await _asyncSemaphore.WaitAsync(); + try + { + using (SqlConnection connection = new SqlConnection(ConnectionString)) + { + await connection.OpenAsync(); + reader = await cmd.ExecuteReaderAsync(); + } + } + catch (SqlException ex) + { + Trace.WriteLine("SQL Exception:" + ex.Message); + _log.Error("Error performing command", ex); + _log.DebugFormat("Query: {0}", cmd.CommandText); + _log.Debug("Parameters:"); + for (int i = 0; i < cmd.Parameters.Count; i++) + { + _log.DebugFormat("{0}:{1}", cmd.Parameters[i].ParameterName, cmd.Parameters[i].Value); + } + } + finally + { + // _asyncSemaphore.Release(); + } + + return reader; + } + + internal static async Task PerformNonQuery(SqlCommand cmd) + { + int result = -1; + // await _asyncSemaphore.WaitAsync(); + try + { + using (SqlConnection connection = new SqlConnection(ConnectionString)) + { + await connection.OpenAsync(); + result = await cmd.ExecuteNonQueryAsync(); + } + } + catch (SqlException ex) + { + Trace.WriteLine("SQL Exception:" + ex.Message); + _log.Error("Error performing command", ex); + _log.DebugFormat("Query: {0}", cmd.CommandText); + _log.Debug("Parameters:"); + for (int i = 0; i < cmd.Parameters.Count; i++) + { + _log.DebugFormat("{0}:{1}", cmd.Parameters[i].ParameterName, cmd.Parameters[i].Value); + } + } + + return result; + } + + internal static async Task PerformReadIntQuery(SqlCommand cmd) + { + int? result = null; + + try + { + using (SqlConnection connection = new SqlConnection(ConnectionString)) + { + object r = await cmd.ExecuteScalarAsync(); + if (r == null) { result = null; } + else if (r == DBNull.Value) { result = null; } + else { result = (int)r; } + } + } + catch (SqlException ex) + { + _log.Error("Error performing command", ex); + _log.DebugFormat("Query: {0}", cmd.CommandText); + _log.Debug("Parameters:"); + for (int i = 0; i < cmd.Parameters.Count; i++) + { + _log.DebugFormat("{0}:{1}", cmd.Parameters[i].ParameterName, cmd.Parameters[i].Value); + } + } + + return result; + } + + #endregion + + } +} diff --git a/bsmd.database/DatabaseEntity.cs b/bsmd.database/DatabaseEntity.cs index 738df298..749ca348 100644 --- a/bsmd.database/DatabaseEntity.cs +++ b/bsmd.database/DatabaseEntity.cs @@ -30,7 +30,7 @@ namespace bsmd.database [DataContract] public abstract class DatabaseEntity : IDatabaseEntity, IMessageParagraph, IEquatable, ICloneable { - protected Guid? id; + protected Guid? id; protected string tablename; private Guid instance_id = Guid.NewGuid(); // Comparison id in case entity has not been saved private static readonly ILog _log = LogManager.GetLogger(typeof(DatabaseEntity)); @@ -124,7 +124,7 @@ namespace bsmd.database public abstract void PrepareSave(IDbCommand cmd); - public virtual void PrepareDelete(IDbCommand cmd) + public virtual void PrepareDelete(IDbCommand cmd) { SqlCommand scmd = cmd as SqlCommand; scmd.CommandText = string.Format("DELETE FROM {0} WHERE Id = @ID", Tablename); diff --git a/bsmd.database/Extensions.cs b/bsmd.database/Extensions.cs index 29b03dbb..bcfd3866 100644 --- a/bsmd.database/Extensions.cs +++ b/bsmd.database/Extensions.cs @@ -117,11 +117,21 @@ namespace bsmd.database _log.WarnFormat("{0} cannot be parsed as datetime", text); return null; } - } + } public static bool IsTimeEmpty(this DateTime datetime) { - return ((datetime.Hour == 0) && (datetime.Minute == 0) && (datetime.Second == 0)); + return (datetime.Hour == 0) && (datetime.Minute == 0) && (datetime.Second == 0); + } + + /// + /// Returns true if the date is between now and numDays in the future (or past, if numDays is negative) + /// + public static bool IsNextXDays(this DateTime datetime, int numDays) + { + double diff = (datetime - DateTime.Now).TotalDays; + if (numDays >= 0) return diff < numDays && diff > 0; + else return diff < numDays && diff < 0; } public static double? TryParseDouble(string text) diff --git a/bsmd.database/MaerskData.cs b/bsmd.database/MaerskData.cs new file mode 100644 index 00000000..433a0ad1 --- /dev/null +++ b/bsmd.database/MaerskData.cs @@ -0,0 +1,198 @@ +// Copyright (c) 2020-present schick Informatik +// Description: + +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlClient; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace bsmd.database +{ + + /// + /// Extra balcony: Data stored in Maersk Excel sheets must be stored to be exported + /// at a later date. In order to do that (and to be a little more flexible in the future) + /// we use a generic storage class called "XtraData" that hopefully might be useful in another + /// future scenario as well + /// + public class MaerskData : DatabaseEntity + { + + #region Construction + public MaerskData() + { + this.tablename = "[dbo].[MaerskData]"; + } + + #endregion + + #region Properties + + /// + /// reference id as set in the database + /// + public Guid MessageCoreId { get; set; } + + /// + /// Core instance reference once matched / set + /// + public MessageCore Core { get; set; } + + public bool HasNoIdea => ColM.IsNullOrEmpty(); + + public bool IsNextThreeDays => ETA.HasValue && ETA.Value.IsNextXDays(3); + + public DateTime? ETA { get; set; } + + public string ColA { get; set; } + + public string ColB { get; set; } + /// + /// Shipping area? + /// + public string ColC { get; set; } + + public string ColD { get; set; } + /// + /// Vessel name + /// + public string ColE { get; set; } + /// + /// IMO + /// + public string ColF { get; set; } + /// + /// Voyage-No incoming + /// + public string ColG { get; set; } + /// + /// Voyage-No outgoing + /// + public string ColH { get; set; } + /// + /// Terminal + /// + public string ColI { get; set; } + /// + /// Operator + /// + public string ColJ { get; set; } + /// + /// ETA + /// + public string ColK { get; set; } + /// + /// ETD + /// + public string ColL { get; set; } + /// + /// Visit-Id + /// + public string ColM { get; set; } + + public string Remark { get; set; } + + #endregion + + #region abstract DatabaseEntity method implementation + + public override List LoadList(IDataReader reader) + { + List result = new List(); + if (reader != null) + { + while (reader.Read()) + { + MaerskData md = new MaerskData(); + + md.id = reader.GetGuid(0); + if (!reader.IsDBNull(1)) md.MessageCoreId = reader.GetGuid(1); + if (!reader.IsDBNull(2)) md.ColA = reader.GetString(2); + if (!reader.IsDBNull(3)) md.ColB = reader.GetString(3); + if (!reader.IsDBNull(4)) md.ColC = reader.GetString(4); + if (!reader.IsDBNull(5)) md.ColD = reader.GetString(5); + if (!reader.IsDBNull(6)) md.ColE = reader.GetString(6); + if (!reader.IsDBNull(7)) md.ColF = reader.GetString(7); + if (!reader.IsDBNull(8)) md.ColG = reader.GetString(8); + if (!reader.IsDBNull(9)) md.ColH = reader.GetString(9); + if (!reader.IsDBNull(10)) md.ColI = reader.GetString(10); + if (!reader.IsDBNull(11)) md.ColJ = reader.GetString(11); + if (!reader.IsDBNull(12)) md.ColK = reader.GetString(12); + if (!reader.IsDBNull(13)) md.ColL = reader.GetString(13); + if (!reader.IsDBNull(14)) md.ColM = reader.GetString(14); + if (!reader.IsDBNull(15)) md.Remark = reader.GetString(15); + + // try parsing the column to datetime + if (DateTime.TryParse(md.ColK, out DateTime eta)) + ETA = eta; + + result.Add(md); + } + reader.Close(); + } + return result; + } + + public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria) + { + string query = string.Format("SELECT Id, ReferenceId, Field1, Field2, Field3, Field4, Field5, Field6, Field7, Field8, Field9, Field10, Field11, Field12 , Field13, Field14 FROM {0} ", this.Tablename); + + switch (filter) + { + case Message.LoadFilter.BY_ID: + query += " WHERE Id = @ID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@ID", criteria[0]); + break; + case Message.LoadFilter.BY_CORE: + query += " WHERE ReferenceId = @ID"; + ((SqlCommand)cmd).Parameters.AddWithValue("@ID", criteria[0]); + break; + default: + break; + } + + cmd.CommandText = query; + } + + public override void PrepareSave(IDbCommand cmd) + { + SqlCommand scmd = cmd as SqlCommand; + + scmd.Parameters.AddWithNullableValue("@REF", this.MessageCoreId); + scmd.Parameters.AddWithNullableValue("@COLA", this.ColA); + scmd.Parameters.AddWithNullableValue("@COLB", this.ColB); + scmd.Parameters.AddWithNullableValue("@COLC", this.ColC); + scmd.Parameters.AddWithNullableValue("@COLD", this.ColD); + scmd.Parameters.AddWithNullableValue("@COLE", this.ColE); + scmd.Parameters.AddWithNullableValue("@COLF", this.ColF); + scmd.Parameters.AddWithNullableValue("@COLG", this.ColG); + scmd.Parameters.AddWithNullableValue("@COLH", this.ColH); + scmd.Parameters.AddWithNullableValue("@COLI", this.ColI); + scmd.Parameters.AddWithNullableValue("@COLJ", this.ColJ); + scmd.Parameters.AddWithNullableValue("@COLK", this.ColK); + scmd.Parameters.AddWithNullableValue("@COLL", this.ColL); + scmd.Parameters.AddWithNullableValue("@COLM", this.ColM); + scmd.Parameters.AddWithNullableValue("@REMARK", this.Remark); + + if (this.IsNew) + { + this.CreateId(); + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("INSERT INTO {0} (Id, ReferenceId, Field1, Field2, Field3, Field4, Field5, Field6, Field7, Field8, Field9, Field10, Field11, Field12, Field13, Field14) " + + "VALUES (@ID, @REF, @COLA, @COLB, @COLC, @COLD, @COLE, @COLF, @COLG, @COLH, @COLI, @COLJ, @COLK, @COLL, @COLM, @REMARK)", this.Tablename); + } + else + { + scmd.Parameters.AddWithValue("@ID", this.Id); + scmd.CommandText = string.Format("UPDATE {0} SET Field1 = @COLA, Field2 = @COLB, Field3 = @COLC, Field4 = @COLD, Field5 = @COLE, Field6 = @COLF, @Field7 = @COLG, @Field8 = @COLH, " + + "Field9 = @COLI, Field10 = @COLJ, Field11 = @COLK, Field12 = @COLL, Field13 = @COLM, Field14 = @Remark WHERE Id = @ID", this.Tablename); + } + } + + #endregion + + } +} diff --git a/bsmd.database/MessageCore.cs b/bsmd.database/MessageCore.cs index 191ec9d0..7601f683 100644 --- a/bsmd.database/MessageCore.cs +++ b/bsmd.database/MessageCore.cs @@ -621,8 +621,8 @@ namespace bsmd.database case SearchFilterType.FILTER_ETA: uint? from = null, to = null; string[] elems = searchDict[key].Split(':'); - if (!elems[0].IsNullOrEmpty()) from = UInt32.Parse(elems[0]); - if (!elems[1].IsNullOrEmpty()) to = UInt32.Parse(elems[1]); + if (!elems[0].IsNullOrEmpty()) from = uint.Parse(elems[0]); + if (!elems[1].IsNullOrEmpty()) to = uint.Parse(elems[1]); // SQL Logik für die Zeitfilterung: Wenn es bereits eine Tabelle NOA_NOD mit einem Eintrag für ETAToPortOfCall / ETAToKielCanal gibt // soll dieser Wert als Vergleich herangezogen werden, sonst ETA / ETAKielCanal aus MessageCore @@ -697,16 +697,14 @@ namespace bsmd.database case SearchFilterType.FILTER_FLAG_EQ: { sb.Append(" MessageCore.Flags = @FLAG "); - int flag = 0; - int.TryParse(searchDict[key], out flag); + int.TryParse(searchDict[key], out int flag); ((SqlCommand)cmd).Parameters.AddWithValue("@FLAG", flag); break; } case SearchFilterType.FILTER_FLAG_NEQ: { - sb.Append(" MessageCore.Flags <> @FLAG "); - int flag = 0; - int.TryParse(searchDict[key], out flag); + sb.Append(" MessageCore.Flags <> @FLAG "); + int.TryParse(searchDict[key], out int flag); ((SqlCommand)cmd).Parameters.AddWithValue("@FLAG", flag); break; } diff --git a/bsmd.database/bsmd.database.csproj b/bsmd.database/bsmd.database.csproj index 96bd3403..2c2d57c7 100644 --- a/bsmd.database/bsmd.database.csproj +++ b/bsmd.database/bsmd.database.csproj @@ -111,6 +111,7 @@ + @@ -126,6 +127,7 @@ +