Vor Umstellung der Pop 3 Library zum Testen des ExcelAbrufs

This commit is contained in:
Daniel Schick 2021-06-23 05:09:45 +00:00
parent a519f0f31a
commit 8151ceaa5b
12 changed files with 314 additions and 190 deletions

View File

@ -92,7 +92,7 @@ namespace ENI2
if (!reader.IsDBNull(0)) code = reader.GetString(0); if (!reader.IsDBNull(0)) code = reader.GetString(0);
if (!reader.IsDBNull(1)) name = reader.GetString(1); if (!reader.IsDBNull(1)) name = reader.GetString(1);
if ((code != null) && (name != null)) if ((code != null) && (name != null))
result[code] = name; // string.Format("{0} {1}", code, name); result[code] = string.Format("{0} {1}", code, name);
} }
reader.Close(); reader.Close();
return result; return result;

Binary file not shown.

View File

@ -45,6 +45,7 @@ namespace CoreDeleteTool
{ {
this.toolStripProgressBar.Maximum = this.dataGridView.SelectedRows.Count; this.toolStripProgressBar.Maximum = this.dataGridView.SelectedRows.Count;
this.toolStripStatusLabel.Text = string.Format("Removing {0} items..", this.dataGridView.SelectedRows.Count); this.toolStripStatusLabel.Text = string.Format("Removing {0} items..", this.dataGridView.SelectedRows.Count);
int total = this.dataGridView.SelectedRows.Count;
for (int i = 0; i < this.dataGridView.SelectedRows.Count; i++) for (int i = 0; i < this.dataGridView.SelectedRows.Count; i++)
{ {
@ -54,6 +55,8 @@ namespace CoreDeleteTool
DBManager.Instance.DeleteCore(selectedCore); DBManager.Instance.DeleteCore(selectedCore);
this.messageCores.Remove(selectedCore); this.messageCores.Remove(selectedCore);
this.toolStripProgressBar.Value = i; this.toolStripProgressBar.Value = i;
this.toolStripStatusLabel.Text = string.Format("Removed {0}/{1}", (i + 1), total);
Application.DoEvents();
} }
} }
} }
@ -100,18 +103,19 @@ namespace CoreDeleteTool
if (MessageBox.Show("Delete all items?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) if (MessageBox.Show("Delete all items?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
{ {
Application.UseWaitCursor = true; Application.UseWaitCursor = true;
this.toolStripProgressBar.Maximum = this.messageCores.Count; int total = this.messageCores.Count;
this.toolStripStatusLabel.Text = string.Format("Removing {0} items..", this.messageCores.Count); this.toolStripProgressBar.Maximum = this.messageCores.Count;
for (int i = 0; i < this.messageCores.Count; i++) for (int i = 0; i < this.messageCores.Count; i++)
{ {
MessageCore selectedCore = this.messageCores[i]; MessageCore selectedCore = this.messageCores[i];
DBManager.Instance.DeleteCore(selectedCore); DBManager.Instance.DeleteCore(selectedCore);
this.messageCores.Remove(selectedCore);
this.toolStripProgressBar.Value = i; this.toolStripProgressBar.Value = i;
this.toolStripStatusLabel.Text = string.Format("Removed {0}/{1}", (i + 1), total);
Application.DoEvents(); Application.DoEvents();
} }
Application.UseWaitCursor = false; Application.UseWaitCursor = false;
this.messageCores.Clear();
} }
} }
} }

View File

@ -10,12 +10,6 @@
</startup> </startup>
<applicationSettings> <applicationSettings>
<bsmd.ReportGenerator.Properties.Settings> <bsmd.ReportGenerator.Properties.Settings>
<setting name="ConnectionString" serializeAs="String">
<value>Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False</value>
</setting>
<setting name="OutputDirectory" serializeAs="String">
<value>E:\temp</value>>
</setting>
<setting name="SleepSeconds" serializeAs="String"> <setting name="SleepSeconds" serializeAs="String">
<value>300</value> <value>300</value>
</setting> </setting>
@ -42,12 +36,18 @@
<setting name="Sender" serializeAs="String"> <setting name="Sender" serializeAs="String">
<value>donotreply@bsmd.de</value> <value>donotreply@bsmd.de</value>
</setting> </setting>
<setting name="LogoPath" serializeAs="String">
<value>E:\svnlager\BSMD\nsw\Source\misc\EUREPORT.png</value>
</setting>
<setting name="DeleteFileAfterSend" serializeAs="String"> <setting name="DeleteFileAfterSend" serializeAs="String">
<value>False</value> <value>False</value>
</setting> </setting>
<setting name="ConnectionString" serializeAs="String">
<value>Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False</value>
</setting>
<setting name="OutputDirectory" serializeAs="String">
<value>E:\temp</value>
</setting>
<setting name="LogoPath" serializeAs="String">
<value>E:\svnlager\BSMD\nsw\Source\misc\Logo.gif</value>
</setting>
</bsmd.ReportGenerator.Properties.Settings> </bsmd.ReportGenerator.Properties.Settings>
</applicationSettings> </applicationSettings>
</configuration> </configuration>

View File

@ -26,7 +26,51 @@ using bsmd.database;
namespace bsmd.ReportGenerator namespace bsmd.ReportGenerator
{ {
public class BSMDDocument public class BSMDDocument
{ {
#region static lookup helpers
private static Dictionary<string, string> _cargoCodesNST = null;
private static Dictionary<string, string> cargoCodesNST
{
get
{
if(_cargoCodesNST == null)
{
_cargoCodesNST = LocalizedLookup.getCargoCodesNST();
}
return _cargoCodesNST;
}
}
public static Dictionary<int, string> Edifact8025 = new Dictionary<int, string> {
{1, "Cargo operations" },
{2, "Passenger movement" },
{3, "Taking bunkers" },
{4, "Changing crew" },
{5, "Goodwill visit" },
{6, "Taking supplies" },
{7, "Repair" },
{8, "Laid-up" },
{9, "Awaiting orders" },
{10, "Miscellaneous" },
{11, "Crew movement" },
{12, "Cruise, leisure and recreation" },
{13, "Under government order" },
{14, "Quarantine inspection" },
{15, "Refuge" },
{16, "Unloading cargo" },
{17, "Loading cargo" },
{18, "Repair in dry dock" },
{19, "Repair in wet dock" },
{20, "Cargo tank cleaning" },
{21, "Means of transport customs clearance" },
{22, "De-gassing" },
{23, "Waste disposal" },
{98, "Pass through" }
};
#endregion
#region create document #region create document
@ -369,7 +413,7 @@ namespace bsmd.ReportGenerator
/// Defines page setup, headers, and footers. /// Defines page setup, headers, and footers.
/// </summary> /// </summary>
public static void DefineContentSection(Document document, Orientation orientation, bool isInitialSection) public static void DefineContentSection(Document document, Orientation orientation, bool isInitialSection)
{ {
Section section = document.AddSection(); Section section = document.AddSection();
section.PageSetup.OddAndEvenPagesHeaderFooter = true; section.PageSetup.OddAndEvenPagesHeaderFooter = true;
if(isInitialSection) if(isInitialSection)
@ -487,9 +531,63 @@ namespace bsmd.ReportGenerator
#endregion #endregion
#region NOA_NOD
if ((message != null) && (message.MessageNotificationClass == Message.NotificationClass.NOA_NOD))
{
NOA_NOD noa_nod = message.Elements[0] as NOA_NOD;
Table table = document.LastSection.AddTable();
table.Rows.VerticalAlignment = VerticalAlignment.Center;
table.Borders.Visible = true;
table.Borders.Color = Colors.LightGray;
table.AddColumn(290);
table.AddColumn(200);
Row row = table.AddRow();
if (noa_nod.ETAToPortOfCall.HasValue)
{
row.Cells[0].AddParagraph("Estimated time of arrival (ETA) at port of call");
row.Cells[1].AddParagraph(noa_nod.ETAToPortOfCall.Value.ToLocalTime().ToString("g"));
row = table.AddRow();
row.Cells[0].AddParagraph("Estimated time of departure (ETD) from port of call");
row.Cells[1].AddParagraph(noa_nod.ETDFromPortOfCall.HasValue ? noa_nod.ETDFromPortOfCall.Value.ToLocalTime().ToString("g") : "");
}
else // Kiel passage
{
row.Cells[0].AddParagraph("Estimated time of arrival (ETA) at Kiel Canal entrance (Transit)");
row.Cells[1].AddParagraph(noa_nod.ETAToKielCanal.HasValue ? noa_nod.ETAToKielCanal.Value.ToLocalTime().ToString("g") : "");
row = table.AddRow();
row.Cells[0].AddParagraph("Estimated time of departure (ETD) from Kiel Canal (Transit)");
row.Cells[1].AddParagraph(noa_nod.ETDFromKielCanal.HasValue ? noa_nod.ETDFromKielCanal.Value.ToLocalTime().ToString("g") : "");
}
row = table.AddRow();
row.Cells[0].AddParagraph("Last port");
row.Cells[1].AddParagraph(LocodeDB.PortNameFromLocode(noa_nod.LastPort) ?? "");
row = table.AddRow();
row.Cells[0].AddParagraph("Estimated time of departure from last port");
row.Cells[1].AddParagraph(noa_nod.ETDFromLastPort.HasValue ? noa_nod.ETDFromLastPort.Value.ToLocalTime().ToString("g") : "");
row = table.AddRow();
row.Cells[0].AddParagraph("Next port");
row.Cells[1].AddParagraph(LocodeDB.PortNameFromLocode(noa_nod.NextPort) ?? "");
row = table.AddRow();
row.Cells[0].AddParagraph("Estimated time of arrival at next port");
row.Cells[1].AddParagraph(noa_nod.ETAToNextPort.HasValue ? noa_nod.ETAToNextPort.Value.ToLocalTime().ToString("g") : "");
BSMDDocument.CreateCallPurposeTable(document, message);
return;
}
#endregion
#region BKRD #region BKRD
if((message != null) && (message.MessageNotificationClass == Message.NotificationClass.BKRD)) if ((message != null) && (message.MessageNotificationClass == Message.NotificationClass.BKRD))
{ {
BSMDDocument.CreateBKRDTable(document, message); BSMDDocument.CreateBKRDTable(document, message);
return; return;
@ -539,17 +637,7 @@ namespace bsmd.ReportGenerator
return; return;
} }
#endregion #endregion
#region NOA_NOD
if ((message != null) && (message.MessageNotificationClass == Message.NotificationClass.NOA_NOD))
{
BSMDDocument.CreateCallPurposeTable(document, message);
return;
}
#endregion
#region BPOL #region BPOL
@ -591,6 +679,7 @@ namespace bsmd.ReportGenerator
{ {
Table table = document.LastSection.AddTable(); Table table = document.LastSection.AddTable();
table.Rows.VerticalAlignment = VerticalAlignment.Center; table.Rows.VerticalAlignment = VerticalAlignment.Center;
table.Borders.Color = Colors.LightGray;
table.Borders.Visible = true; table.Borders.Visible = true;
Column column = table.AddColumn(); Column column = table.AddColumn();
@ -602,9 +691,9 @@ namespace bsmd.ReportGenerator
column = table.AddColumn(); column = table.AddColumn();
column.Width = Unit.FromCentimeter(3); column.Width = Unit.FromCentimeter(3);
column = table.AddColumn(); column = table.AddColumn();
column.Width = Unit.FromCentimeter(2); column.Width = Unit.FromCentimeter(2.5);
column = table.AddColumn(); column = table.AddColumn();
column.Width = Unit.FromCentimeter(2); column.Width = Unit.FromCentimeter(1.5);
column = table.AddColumn(); column = table.AddColumn();
column.Width = Unit.FromCentimeter(1); column.Width = Unit.FromCentimeter(1);
column = table.AddColumn(); column = table.AddColumn();
@ -653,6 +742,7 @@ namespace bsmd.ReportGenerator
Table table = document.LastSection.AddTable(); Table table = document.LastSection.AddTable();
table.Rows.VerticalAlignment = VerticalAlignment.Center; table.Rows.VerticalAlignment = VerticalAlignment.Center;
table.Borders.Visible = true; table.Borders.Visible = true;
table.Borders.Color = Colors.LightGray;
Column column = table.AddColumn(); Column column = table.AddColumn();
column.Width = Unit.FromCentimeter(0.8); column.Width = Unit.FromCentimeter(0.8);
@ -727,17 +817,13 @@ namespace bsmd.ReportGenerator
Table table = document.LastSection.AddTable(); Table table = document.LastSection.AddTable();
table.Rows.VerticalAlignment = VerticalAlignment.Center; table.Rows.VerticalAlignment = VerticalAlignment.Center;
table.Borders.Visible = true; table.Borders.Visible = true;
table.Borders.Color = Colors.LightGray;
Column column = table.AddColumn(); table.AddColumn(20);
column.Width = Unit.FromCentimeter(0.8); table.AddColumn(80);
column = table.AddColumn(); table.AddColumn(70);
column.Width = Unit.FromCentimeter(2); table.AddColumn(100);
column = table.AddColumn(); table.AddColumn(220);
column.Width = Unit.FromCentimeter(3);
column = table.AddColumn();
column.Width = Unit.FromCentimeter(1.2);
column = table.AddColumn();
column.Width = Unit.FromCentimeter(9);
Row hRow = table.AddRow(); Row hRow = table.AddRow();
@ -763,15 +849,12 @@ namespace bsmd.ReportGenerator
Table table = document.LastSection.AddTable(); Table table = document.LastSection.AddTable();
table.Rows.VerticalAlignment = VerticalAlignment.Center; table.Rows.VerticalAlignment = VerticalAlignment.Center;
table.Borders.Visible = true; table.Borders.Visible = true;
table.Borders.Color = Colors.LightGray;
Column column = table.AddColumn(); table.AddColumn(20);
column.Width = Unit.FromCentimeter(0.8); table.AddColumn(200);
column = table.AddColumn(); table.AddColumn(200);
column.Width = Unit.FromCentimeter(2); table.AddColumn(70);
column = table.AddColumn();
column.Width = Unit.FromCentimeter(3);
column = table.AddColumn();
column.Width = Unit.FromCentimeter(1.5);
Row hRow = table.AddRow(); Row hRow = table.AddRow();
hRow.Cells[1].AddParagraph("Type"); hRow.Cells[1].AddParagraph("Type");
@ -798,13 +881,11 @@ namespace bsmd.ReportGenerator
Table table = document.LastSection.AddTable(); Table table = document.LastSection.AddTable();
table.Rows.VerticalAlignment = VerticalAlignment.Center; table.Rows.VerticalAlignment = VerticalAlignment.Center;
table.Borders.Visible = true; table.Borders.Visible = true;
table.Borders.Color = Colors.LightGray;
Column column = table.AddColumn(); table.AddColumn(20);
column.Width = Unit.FromCentimeter(0.8); table.AddColumn(400);
column = table.AddColumn(); table.AddColumn(70);
column.Width = Unit.FromCentimeter(3);
column = table.AddColumn();
column.Width = Unit.FromCentimeter(2);
Row hRow = table.AddRow(); Row hRow = table.AddRow();
hRow.Cells[1].AddParagraph("Port"); hRow.Cells[1].AddParagraph("Port");
@ -870,7 +951,8 @@ namespace bsmd.ReportGenerator
LADG ladg = message.Elements[i] as LADG; LADG ladg = message.Elements[i] as LADG;
row.Cells[0].AddParagraph((i + 1).ToString()); row.Cells[0].AddParagraph((i + 1).ToString());
row.Cells[1].AddParagraph(ladg.CargoHandlingType.HasValue ? (ladg.CargoHandlingType.Value == 0) ? "Load" : "Discharge" : ""); row.Cells[1].AddParagraph(ladg.CargoHandlingType.HasValue ? (ladg.CargoHandlingType.Value == 0) ? "Load" : "Discharge" : "");
row.Cells[2].AddParagraph(ladg.CargoCodeNST ?? ""); if(!ladg.CargoCodeNST.IsNullOrEmpty() && cargoCodesNST.ContainsKey(ladg.CargoCodeNST))
row.Cells[2].AddParagraph(cargoCodesNST[ladg.CargoCodeNST].Substring(3));
row.Cells[3].AddParagraph(ladg.CargoNumberOfItems.HasValue ? ladg.CargoNumberOfItems.Value.ToString() : ""); row.Cells[3].AddParagraph(ladg.CargoNumberOfItems.HasValue ? ladg.CargoNumberOfItems.Value.ToString() : "");
row.Cells[4].AddParagraph(ladg.CargoGrossQuantity_TNE.HasValue ? ladg.CargoGrossQuantity_TNE.Value.ToString("N2") : ""); row.Cells[4].AddParagraph(ladg.CargoGrossQuantity_TNE.HasValue ? ladg.CargoGrossQuantity_TNE.Value.ToString("N2") : "");
} }
@ -1038,7 +1120,11 @@ namespace bsmd.ReportGenerator
row.Cells[4].AddParagraph(s2sActivity.ShipToShipActivityLocationCoordinatesLongitude.HasValue ? s2sActivity.ShipToShipActivityLocationCoordinatesLongitude.ToString() : ""); row.Cells[4].AddParagraph(s2sActivity.ShipToShipActivityLocationCoordinatesLongitude.HasValue ? s2sActivity.ShipToShipActivityLocationCoordinatesLongitude.ToString() : "");
row.Cells[5].AddParagraph(s2sActivity.ShipToShipActivityDateFrom.HasValue ? s2sActivity.ShipToShipActivityDateFrom.Value.ToShortDateString() : ""); row.Cells[5].AddParagraph(s2sActivity.ShipToShipActivityDateFrom.HasValue ? s2sActivity.ShipToShipActivityDateFrom.Value.ToShortDateString() : "");
row.Cells[6].AddParagraph(s2sActivity.ShipToShipActivityDateTo.HasValue ? s2sActivity.ShipToShipActivityDateTo.Value.ToShortDateString() : ""); row.Cells[6].AddParagraph(s2sActivity.ShipToShipActivityDateTo.HasValue ? s2sActivity.ShipToShipActivityDateTo.Value.ToShortDateString() : "");
row.Cells[7].AddParagraph(s2sActivity.ShipToShipActivityType ?? ""); if(!s2sActivity.ShipToShipActivityType.IsNullOrEmpty())
{
if (Int32.TryParse(s2sActivity.ShipToShipActivityType, out int s2sCode) && Edifact8025.ContainsKey(s2sCode))
row.Cells[7].AddParagraph(Edifact8025[s2sCode]);
}
row.Cells[8].AddParagraph(s2sActivity.ShipToShipActivitySecurityMattersToReport ?? ""); row.Cells[8].AddParagraph(s2sActivity.ShipToShipActivitySecurityMattersToReport ?? "");
} }
@ -1052,17 +1138,13 @@ namespace bsmd.ReportGenerator
table.Format.Font.Size = 8; table.Format.Font.Size = 8;
table.Rows.VerticalAlignment = VerticalAlignment.Center; table.Rows.VerticalAlignment = VerticalAlignment.Center;
table.Borders.Visible = true; table.Borders.Visible = true;
table.Borders.Color = Colors.LightGray;
Column column = table.AddColumn(); table.AddColumn(20);
column.Width = Unit.FromCentimeter(0.8); table.AddColumn(350);
column = table.AddColumn(); table.AddColumn(120);
column.Width = Unit.FromCentimeter(5);
column = table.AddColumn();
column.Width = Unit.FromCentimeter(1.5);
column = table.AddColumn();
Row hRow = table.AddRow(); Row hRow = table.AddRow();
hRow.Cells[0].AddParagraph("No.");
hRow.Cells[1].AddParagraph("Name"); hRow.Cells[1].AddParagraph("Name");
hRow.Cells[2].AddParagraph("ETA"); hRow.Cells[2].AddParagraph("ETA");
@ -1161,8 +1243,8 @@ namespace bsmd.ReportGenerator
row = table.AddRow(); row = table.AddRow();
row.Cells[0].AddParagraph("Last port where waste or cargo residues were discharged"); row.Cells[0].AddParagraph("Last port where waste or cargo residues were discharged");
row.Cells[1].AddParagraph("Date of last disposal"); row.Cells[1].AddParagraph("Date of last disposal");
row = table.AddRow(); row = table.AddRow();
row.Cells[0].AddParagraph(was.LastWasteDisposalPort ?? ""); row.Cells[0].AddParagraph(LocodeDB.PortNameFromLocode(was.LastWasteDisposalPort) ?? "");
if(was.LastWasteDisposalDate.HasValue) if(was.LastWasteDisposalDate.HasValue)
row.Cells[1].AddParagraph(was.LastWasteDisposalDate?.ToShortDateString()); row.Cells[1].AddParagraph(was.LastWasteDisposalDate?.ToShortDateString());
row = table.AddRow(); row = table.AddRow();
@ -1266,7 +1348,7 @@ namespace bsmd.ReportGenerator
row.Cells[2].AddParagraph(waste.WasteDisposalAmount_MTQ.HasValue ? waste.WasteDisposalAmount_MTQ.Value.ToString("N3") : ""); row.Cells[2].AddParagraph(waste.WasteDisposalAmount_MTQ.HasValue ? waste.WasteDisposalAmount_MTQ.Value.ToString("N3") : "");
row.Cells[3].AddParagraph(waste.WasteCapacity_MTQ.HasValue ? waste.WasteCapacity_MTQ.Value.ToString("N3") : ""); row.Cells[3].AddParagraph(waste.WasteCapacity_MTQ.HasValue ? waste.WasteCapacity_MTQ.Value.ToString("N3") : "");
row.Cells[4].AddParagraph(waste.WasteAmountRetained_MTQ.HasValue ? waste.WasteAmountRetained_MTQ.Value.ToString("N3") : ""); row.Cells[4].AddParagraph(waste.WasteAmountRetained_MTQ.HasValue ? waste.WasteAmountRetained_MTQ.Value.ToString("N3") : "");
row.Cells[5].AddParagraph(waste.WasteDisposalPort ?? ""); row.Cells[5].AddParagraph(LocodeDB.PortNameFromLocode(waste.WasteDisposalPort) ?? "");
row.Cells[6].AddParagraph(waste.WasteAmountGeneratedTillNextPort_MTQ.HasValue ? waste.WasteAmountGeneratedTillNextPort_MTQ.Value.ToString("N3") : ""); row.Cells[6].AddParagraph(waste.WasteAmountGeneratedTillNextPort_MTQ.HasValue ? waste.WasteAmountGeneratedTillNextPort_MTQ.Value.ToString("N3") : "");
} }
} }
@ -1285,7 +1367,13 @@ namespace bsmd.ReportGenerator
table.AddColumn(20); // lfd. Nr. table.AddColumn(20); // lfd. Nr.
table.AddColumn(50); // Name table.AddColumn(50); // Name
table.AddColumn(30); // Flag table.AddColumn(30); // Flag
table.AddColumn(30); // Gross ton
table.AddColumn(30); // Length
table.AddColumn(30); // Beam
table.AddColumn(60); // Purpose of call
table.AddColumn(35); // Draft
table.AddColumn(70); // Remarks
table.AddColumn(60); // Company table.AddColumn(60); // Company
table.AddColumn(70); // Street table.AddColumn(70); // Street
table.AddColumn(40); // Postal code table.AddColumn(40); // Postal code
@ -1293,34 +1381,28 @@ namespace bsmd.ReportGenerator
table.AddColumn(60); // Phone table.AddColumn(60); // Phone
table.AddColumn(60); // Fax table.AddColumn(60); // Fax
table.AddColumn(70); // EMail table.AddColumn(70); // EMail
table.AddColumn(30); // Gross ton
table.AddColumn(30); // Length
table.AddColumn(30); // Beam
table.AddColumn(60); // Purpose of call
table.AddColumn(35); // Draft
table.AddColumn(70); // Remarks
// 770 // 770
Row opRow = table.AddRow(); Row opRow = table.AddRow();
opRow.Cells[2].AddParagraph("Operator"); opRow.Cells[9].AddParagraph("Operator");
opRow.Cells[2].MergeRight = 8; opRow.Cells[9].MergeRight = 6;
Row hRow = table.AddRow(); Row hRow = table.AddRow();
hRow.Cells[1].AddParagraph("Name"); hRow.Cells[1].AddParagraph("Name");
hRow.Cells[2].AddParagraph("Flag"); hRow.Cells[2].AddParagraph("Flag");
hRow.Cells[3].AddParagraph("Company name"); hRow.Cells[3].AddParagraph("Gross ton.");
hRow.Cells[4].AddParagraph("Street / No."); hRow.Cells[4].AddParagraph("Len (m)");
hRow.Cells[5].AddParagraph("Postal Code"); hRow.Cells[5].AddParagraph("Beam (m)");
hRow.Cells[6].AddParagraph("Co."); hRow.Cells[6].AddParagraph("Purpose of call");
hRow.Cells[7].AddParagraph("Phone"); hRow.Cells[7].AddParagraph("Draft (dm)");
hRow.Cells[8].AddParagraph("Fax"); hRow.Cells[8].AddParagraph("Remarks");
hRow.Cells[9].AddParagraph("Email"); hRow.Cells[9].AddParagraph("Company name");
hRow.Cells[10].AddParagraph("Gross ton."); hRow.Cells[10].AddParagraph("Street / No.");
hRow.Cells[11].AddParagraph("Len (m)"); hRow.Cells[11].AddParagraph("Postal Code");
hRow.Cells[12].AddParagraph("Beam (m)"); hRow.Cells[12].AddParagraph("Co.");
hRow.Cells[13].AddParagraph("Purpose of call"); hRow.Cells[13].AddParagraph("Phone");
hRow.Cells[14].AddParagraph("Dr. (m)"); hRow.Cells[14].AddParagraph("Fax");
hRow.Cells[15].AddParagraph("Remarks"); hRow.Cells[15].AddParagraph("Email");
for (int i = 0; i < message.Elements.Count; i++) for (int i = 0; i < message.Elements.Count; i++)
{ {
@ -1328,20 +1410,20 @@ namespace bsmd.ReportGenerator
Row row = table.AddRow(); Row row = table.AddRow();
row.Cells[0].AddParagraph((i + 1).ToString()); row.Cells[0].AddParagraph((i + 1).ToString());
row.Cells[1].AddParagraph(towa.TowageOnArrivalName ?? ""); row.Cells[1].AddParagraph(towa.TowageOnArrivalName ?? "");
row.Cells[2].AddParagraph(towa.TowageOnArrivalFlag ?? ""); row.Cells[2].AddParagraph(towa.TowageOnArrivalFlag ?? "");
row.Cells[3].AddParagraph(towa.TowageOnArrivalOperatorCompanyName ?? ""); row.Cells[3].AddParagraph(towa.TowageOnArrivalGrossTonnage.HasValue ? towa.TowageOnArrivalGrossTonnage.Value.ToString() : "");
row.Cells[4].AddParagraph(towa.TowageOnArrivalOperatorStreetNameAndNumber); row.Cells[4].AddParagraph(towa.TowageOnArrivalLengthOverall_MTR.HasValue ? towa.TowageOnArrivalLengthOverall_MTR.Value.ToString("N1") : "");
row.Cells[5].AddParagraph(towa.TowageOnArrivalOperatorPostalCode); row.Cells[5].AddParagraph(towa.TowageOnArrivalBeam_MTR.HasValue ? towa.TowageOnArrivalBeam_MTR.Value.ToString("N1") : "");
row.Cells[6].AddParagraph(towa.TowageOnArrivalOperatorCountry ?? ""); row.Cells[6].AddParagraph(towa.TowageOnArrivalPurposeOfCall ?? "");
row.Cells[7].AddParagraph(towa.TowageOnArrivalOperatorPhone); row.Cells[7].AddParagraph(towa.TowageOnArrivalDraught_DMT.HasValue ? towa.TowageOnArrivalDraught_DMT.Value.ToString("N1") : "");
row.Cells[8].AddParagraph(towa.TowageOnArrivalOperatorFax ?? ""); row.Cells[8].AddParagraph(towa.TowageOnArrivalRemarks ?? "");
row.Cells[9].AddParagraph(towa.TowageOnArrivalOperatorEmail ?? ""); row.Cells[9].AddParagraph(towa.TowageOnArrivalOperatorCompanyName ?? "");
row.Cells[10].AddParagraph(towa.TowageOnArrivalGrossTonnage.HasValue ? towa.TowageOnArrivalGrossTonnage.Value.ToString() : ""); row.Cells[10].AddParagraph(towa.TowageOnArrivalOperatorStreetNameAndNumber);
row.Cells[11].AddParagraph(towa.TowageOnArrivalLengthOverall_MTR.HasValue ? towa.TowageOnArrivalLengthOverall_MTR.Value.ToString("N1") : ""); row.Cells[11].AddParagraph(towa.TowageOnArrivalOperatorPostalCode);
row.Cells[12].AddParagraph(towa.TowageOnArrivalBeam_MTR.HasValue ? towa.TowageOnArrivalBeam_MTR.Value.ToString("N1") : ""); row.Cells[12].AddParagraph(towa.TowageOnArrivalOperatorCountry ?? "");
row.Cells[13].AddParagraph(towa.TowageOnArrivalPurposeOfCall ?? ""); row.Cells[13].AddParagraph(towa.TowageOnArrivalOperatorPhone);
row.Cells[14].AddParagraph(towa.TowageOnArrivalDraught_DMT.HasValue ? towa.TowageOnArrivalDraught_DMT.Value.ToString("N1") : ""); row.Cells[14].AddParagraph(towa.TowageOnArrivalOperatorFax ?? "");
row.Cells[15].AddParagraph(towa.TowageOnArrivalRemarks ?? ""); row.Cells[15].AddParagraph(towa.TowageOnArrivalOperatorEmail ?? "");
} }
} }
@ -1358,38 +1440,38 @@ namespace bsmd.ReportGenerator
table.AddColumn(20); // lfd. Nr. table.AddColumn(20); // lfd. Nr.
table.AddColumn(50); // Name table.AddColumn(50); // Name
table.AddColumn(30); // Flag table.AddColumn(30); // Flag
table.AddColumn(60); // Company
table.AddColumn(70); // Street
table.AddColumn(40); // Postal code
table.AddColumn(25); // Country
table.AddColumn(60); // Phone
table.AddColumn(60); // Fax
table.AddColumn(70); // EMail
table.AddColumn(30); // Length table.AddColumn(30); // Length
table.AddColumn(30); // Beam table.AddColumn(30); // Beam
table.AddColumn(35); // Draft table.AddColumn(35); // Draft
table.AddColumn(160); // Remarks table.AddColumn(120); // Remarks
table.AddColumn(60); // Company
table.AddColumn(70); // Street
table.AddColumn(40); // Postal code
table.AddColumn(65); // Country
table.AddColumn(60); // Phone
table.AddColumn(60); // Fax
table.AddColumn(70); // EMail
// 770 // 770
Row opRow = table.AddRow(); Row opRow = table.AddRow();
opRow.Cells[2].AddParagraph("Operator"); opRow.Cells[7].AddParagraph("Operator");
opRow.Cells[2].MergeRight = 8; opRow.Cells[7].MergeRight = 6;
Row hRow = table.AddRow(); Row hRow = table.AddRow();
hRow.Cells[1].AddParagraph("Name"); hRow.Cells[1].AddParagraph("Name");
hRow.Cells[2].AddParagraph("Flag"); hRow.Cells[2].AddParagraph("Flag");
hRow.Cells[3].AddParagraph("Company Name"); hRow.Cells[3].AddParagraph("Len (m)");
hRow.Cells[4].AddParagraph("Street / No."); hRow.Cells[4].AddParagraph("Beam (m)");
hRow.Cells[5].AddParagraph("Postal Code"); hRow.Cells[5].AddParagraph("Draft (dm)");
hRow.Cells[6].AddParagraph("Co."); hRow.Cells[6].AddParagraph("Remarks");
hRow.Cells[7].AddParagraph("Phone"); hRow.Cells[7].AddParagraph("Company Name");
hRow.Cells[8].AddParagraph("Fax"); hRow.Cells[8].AddParagraph("Street / No.");
hRow.Cells[9].AddParagraph("Email"); hRow.Cells[9].AddParagraph("Postal Code");
hRow.Cells[10].AddParagraph("Len (m)"); hRow.Cells[10].AddParagraph("Co.");
hRow.Cells[11].AddParagraph("Beam (m)"); hRow.Cells[11].AddParagraph("Phone");
hRow.Cells[12].AddParagraph("Dr. (m)"); hRow.Cells[12].AddParagraph("Fax");
hRow.Cells[13].AddParagraph("Remarks"); hRow.Cells[13].AddParagraph("Email");
for (int i = 0; i < message.Elements.Count; i++) for (int i = 0; i < message.Elements.Count; i++)
{ {
@ -1397,18 +1479,18 @@ namespace bsmd.ReportGenerator
Row row = table.AddRow(); Row row = table.AddRow();
row.Cells[0].AddParagraph((i + 1).ToString()); row.Cells[0].AddParagraph((i + 1).ToString());
row.Cells[1].AddParagraph(towd.TowageOnDepartureName ?? ""); row.Cells[1].AddParagraph(towd.TowageOnDepartureName ?? "");
row.Cells[2].AddParagraph(towd.TowageOnDepartureFlag ?? ""); row.Cells[2].AddParagraph(towd.TowageOnDepartureFlag ?? "");
row.Cells[3].AddParagraph(towd.TowageOnDepartureOperatorCompanyName ?? ""); row.Cells[3].AddParagraph(towd.TowageOnDepartureLengthOverall_MTR.HasValue ? towd.TowageOnDepartureLengthOverall_MTR.Value.ToString() : "");
row.Cells[4].AddParagraph(towd.TowageOnDepartureOperatorStreetNameAndNumber); row.Cells[4].AddParagraph(towd.TowageOnDepartureBeam_MTR.HasValue ? towd.TowageOnDepartureBeam_MTR.Value.ToString() : "");
row.Cells[5].AddParagraph(towd.TowageOnDepartureOperatorPostalCode); row.Cells[5].AddParagraph(towd.TowageOnDepartureDraught_DMT.HasValue ? towd.TowageOnDepartureDraught_DMT.Value.ToString() : "");
row.Cells[6].AddParagraph(towd.TowageOnDepartureOperatorCountry ?? ""); row.Cells[6].AddParagraph(towd.TowageOnDepartureRemarks ?? "");
row.Cells[7].AddParagraph(towd.TowageOnDepartureOperatorPhone); row.Cells[7].AddParagraph(towd.TowageOnDepartureOperatorCompanyName ?? "");
row.Cells[8].AddParagraph(towd.TowageOnDepartureOperatorFax ?? ""); row.Cells[8].AddParagraph(towd.TowageOnDepartureOperatorStreetNameAndNumber);
row.Cells[9].AddParagraph(towd.TowageOnDepartureOperatorEmail ?? ""); row.Cells[9].AddParagraph(towd.TowageOnDepartureOperatorPostalCode);
row.Cells[10].AddParagraph(towd.TowageOnDepartureLengthOverall_MTR.HasValue ? towd.TowageOnDepartureLengthOverall_MTR.Value.ToString() : ""); row.Cells[10].AddParagraph(towd.TowageOnDepartureOperatorCountry ?? "");
row.Cells[11].AddParagraph(towd.TowageOnDepartureBeam_MTR.HasValue ? towd.TowageOnDepartureBeam_MTR.Value.ToString() : ""); row.Cells[11].AddParagraph(towd.TowageOnDepartureOperatorPhone);
row.Cells[12].AddParagraph(towd.TowageOnDepartureDraught_DMT.HasValue ? towd.TowageOnDepartureDraught_DMT.Value.ToString() : ""); row.Cells[12].AddParagraph(towd.TowageOnDepartureOperatorFax ?? "");
row.Cells[13].AddParagraph(towd.TowageOnDepartureRemarks ?? ""); row.Cells[13].AddParagraph(towd.TowageOnDepartureOperatorEmail ?? "");
} }
} }
@ -1476,8 +1558,8 @@ namespace bsmd.ReportGenerator
Row row = table.AddRow(); Row row = table.AddRow();
Cell cell = row.Cells[0]; Cell cell = row.Cells[0];
Paragraph aParagraph = cell.AddParagraph(elem.Key); Paragraph aParagraph = cell.AddParagraph(elem.Key);
if (elem.Value.IsNullOrEmpty()) // if (elem.Value.IsNullOrEmpty()) // 14.6.21: CH: nichts ausgrauen
aParagraph.Style = "Gray"; // aParagraph.Style = "Gray";
string val = elem.Value; string val = elem.Value;
// funktioniert leider nicht, müsste das auf PDFsharp umstellen (http://www.pdfsharp.net/wiki/Unicode-sample.ashx) // funktioniert leider nicht, müsste das auf PDFsharp umstellen (http://www.pdfsharp.net/wiki/Unicode-sample.ashx)
if (val == "True") val = "Yes"; // @"\u2611"; // unicode ballot box with check if (val == "True") val = "Yes"; // @"\u2611"; // unicode ballot box with check
@ -1525,6 +1607,11 @@ namespace bsmd.ReportGenerator
// ACHTUNG! Die Name (propertyName) sind die bereits in report.db *ersetzten* Namen, d.h. ändert man dort // ACHTUNG! Die Name (propertyName) sind die bereits in report.db *ersetzten* Namen, d.h. ändert man dort
// wieder etwas funktioniert es ggf. hier nicht mehr. Das ist leider aufwändig zu ändern, man müsste die Report // wieder etwas funktioniert es ggf. hier nicht mehr. Das ist leider aufwändig zu ändern, man müsste die Report
// Erzeugung komplett umbauen // Erzeugung komplett umbauen
if(propertyName.Contains("fumigated", StringComparison.OrdinalIgnoreCase))
{
int bla = 23;
}
switch(propertyName) switch(propertyName)
{ {
@ -1543,9 +1630,12 @@ namespace bsmd.ReportGenerator
} }
} }
break; break;
case "Ship Type": case "ShipType":
if (LocalizedLookup.getVesselTypes().ContainsKey(value)) if (LocalizedLookup.getVesselTypes().ContainsKey(value))
result = string.Format("{0} - {1}", value, LocalizedLookup.getVesselTypes()[value]); {
string codeAndText = LocalizedLookup.getVesselTypes()[value];
result = codeAndText.Substring(codeAndText.IndexOf(' ')); // snip off the code
}
break; break;
case "INFShipClass": case "INFShipClass":
case "INF-Ship-Class": case "INF-Ship-Class":
@ -1582,7 +1672,7 @@ namespace bsmd.ReportGenerator
} }
} }
break; break;
case "General Description of Cargo": case "GeneralDescriptionOfCargo":
{ {
switch(value) switch(value)
{ {
@ -1620,13 +1710,33 @@ namespace bsmd.ReportGenerator
} }
} }
break; break;
case "TankerHullConfiguration":
{
switch (value)
{
case "0": result = "Single hull"; break;
case "1": result = "Single hull with SBT"; break;
case "2": result = "Double hull"; break;
}
}
break;
case "ConditionCargoBallastTanks":
{
switch(value)
{
case "0": result = "Full"; break;
case "1": result = "Empty"; break;
case "2": result = "Inerted"; break;
}
}
break;
default: default:
break; break;
} }
if(propertyName.Contains("flag", StringComparison.OrdinalIgnoreCase)) if(propertyName.Contains("flag", StringComparison.OrdinalIgnoreCase))
if (LocalizedLookup.getNationalities().ContainsKey(value)) if (LocalizedLookup.getNationalities().ContainsKey(value))
result = LocalizedLookup.getNationalities()[value]; result = LocalizedLookup.getNationalities()[value].Substring(3); // remove code from result
if(propertyName.Contains("port", StringComparison.OrdinalIgnoreCase)) if(propertyName.Contains("port", StringComparison.OrdinalIgnoreCase))
{ {
@ -1639,9 +1749,8 @@ namespace bsmd.ReportGenerator
} }
if (propertyName.Contains("nst2007", StringComparison.OrdinalIgnoreCase)) if (propertyName.Contains("nst2007", StringComparison.OrdinalIgnoreCase))
if (LocalizedLookup.getCargoCodesNST().ContainsKey(value)) if (cargoCodesNST.ContainsKey(value))
result = LocalizedLookup.getCargoCodesNST()[value]; result = cargoCodesNST[value];
return result; return result;
} }

View File

@ -12,7 +12,7 @@ namespace bsmd.ReportGenerator.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@ -23,24 +23,6 @@ namespace bsmd.ReportGenerator.Properties {
} }
} }
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("replace me!")]
public string ConnectionString {
get {
return ((string)(this["ConnectionString"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string OutputDirectory {
get {
return ((string)(this["OutputDirectory"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("300")] [global::System.Configuration.DefaultSettingValueAttribute("300")]
@ -106,15 +88,6 @@ namespace bsmd.ReportGenerator.Properties {
} }
} }
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string LogoPath {
get {
return ((string)(this["LogoPath"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")] [global::System.Configuration.DefaultSettingValueAttribute("False")]
@ -123,5 +96,34 @@ namespace bsmd.ReportGenerator.Properties {
return ((bool)(this["DeleteFileAfterSend"])); return ((bool)(this["DeleteFileAfterSend"]));
} }
} }
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=E:\\DATA\\DB\\NSW.MDF;Integrated " +
"Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;Appl" +
"icationIntent=ReadWrite;MultiSubnetFailover=False")]
public string ConnectionString {
get {
return ((string)(this["ConnectionString"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("E:\\temp")]
public string OutputDirectory {
get {
return ((string)(this["OutputDirectory"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("E:\\svnlager\\BSMD\\nsw\\Source\\misc\\Logo.gif")]
public string LogoPath {
get {
return ((string)(this["LogoPath"]));
}
}
} }
} }

View File

@ -2,12 +2,6 @@
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="bsmd.ReportGenerator.Properties" GeneratedClassName="Settings"> <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="bsmd.ReportGenerator.Properties" GeneratedClassName="Settings">
<Profiles /> <Profiles />
<Settings> <Settings>
<Setting Name="ConnectionString" Type="System.String" Scope="Application">
<Value Profile="(Default)">replace me!</Value>
</Setting>
<Setting Name="OutputDirectory" Type="System.String" Scope="Application">
<Value Profile="(Default)" />
</Setting>
<Setting Name="SleepSeconds" Type="System.Int32" Scope="Application"> <Setting Name="SleepSeconds" Type="System.Int32" Scope="Application">
<Value Profile="(Default)">300</Value> <Value Profile="(Default)">300</Value>
</Setting> </Setting>
@ -32,11 +26,17 @@
<Setting Name="Sender" Type="System.String" Scope="Application"> <Setting Name="Sender" Type="System.String" Scope="Application">
<Value Profile="(Default)">donotreply@bsmd.de</Value> <Value Profile="(Default)">donotreply@bsmd.de</Value>
</Setting> </Setting>
<Setting Name="LogoPath" Type="System.String" Scope="Application">
<Value Profile="(Default)" />
</Setting>
<Setting Name="DeleteFileAfterSend" Type="System.Boolean" Scope="Application"> <Setting Name="DeleteFileAfterSend" Type="System.Boolean" Scope="Application">
<Value Profile="(Default)">False</Value> <Value Profile="(Default)">False</Value>
</Setting> </Setting>
<Setting Name="ConnectionString" Type="System.String" Scope="Application">
<Value Profile="(Default)">Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False</Value>
</Setting>
<Setting Name="OutputDirectory" Type="System.String" Scope="Application">
<Value Profile="(Default)">E:\temp</Value>
</Setting>
<Setting Name="LogoPath" Type="System.String" Scope="Application">
<Value Profile="(Default)">E:\svnlager\BSMD\nsw\Source\misc\Logo.gif</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -173,6 +173,7 @@ namespace bsmd.database
} }
} }
/*
public override List<IMessageParagraph> ChildParagraphs public override List<IMessageParagraph> ChildParagraphs
{ {
get get
@ -183,6 +184,7 @@ namespace bsmd.database
return result; return result;
} }
} }
*/
#endregion #endregion

View File

@ -401,7 +401,7 @@ namespace bsmd.database
} }
else else
{ {
value = ((DateTime)propValue).ToLocalTime().ToString(); // perform UTC-LocalTime Conversion value = ((DateTime)propValue).ToLocalTime().ToString("g"); // perform UTC-LocalTime Conversion (no seconds)
} }
} }
else else

View File

@ -705,6 +705,13 @@ namespace bsmd.database
public void DeleteElements() public void DeleteElements()
{ {
foreach (MessageError me in ErrorList)
DBManager.Instance.Delete(me);
foreach (MessageViolation mv in ViolationList)
DBManager.Instance.Delete(mv);
foreach (SystemError se in SystemErrorList)
DBManager.Instance.Delete(se);
foreach (DatabaseEntity dbEntity in this.Elements) foreach (DatabaseEntity dbEntity in this.Elements)
{ {
if (dbEntity is ISublistContainer sublistContainer) if (dbEntity is ISublistContainer sublistContainer)

View File

@ -88,7 +88,7 @@ namespace bsmd.database
break; break;
} }
query += " ORDER BY CAST(Identifier AS INT)"; query += " ORDER BY TRY_CAST(Identifier AS INT)";
cmd.CommandText = query; cmd.CommandText = query;
} }

Binary file not shown.