80 lines
3.1 KiB
C#
80 lines
3.1 KiB
C#
// Copyright (c) 2008-2019 schick Informatik
|
|
// Description: Erzeugt eine CSV Datei aus dem Query
|
|
//
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.IO;
|
|
|
|
namespace puls200.AIS2Excel
|
|
{
|
|
public static class AISVessel
|
|
{
|
|
const string ExportQuery = "SELECT ap.MMSI, ap.timestamp, ap.latitude, ap.longitude, ap.ROT, ap.COG, ap.SOG, ap.Accuracy, ap.heading, ap.NavStatus, ap.CommState, ap.Raim, " +
|
|
"sd.aisversion, sd.imoNumber, sd.callsign, sd.name, sd.shiptype, sd.dimension, sd.typeofdevice, sd.maxpresetstaticdraught, sd.dte, sd.classb, sd.breadth, sd.length " +
|
|
"FROM aisstaticdata sd JOIN aisposreport ap ON ap.mmsi = sd.mmsi " +
|
|
"WHERE ap.Latitude > @LRLAT AND ap.Latitude < @ULLAT AND ap.Longitude > @ULLON AND ap.Longitude < @LRLON AND ap.Timestamp > @FROM AND ap.Timestamp < @TO " +
|
|
"ORDER BY ap.Timestamp";
|
|
|
|
|
|
public static void Export(DateTime from, DateTime to, double ulLat, double ulLon, double lrLat, double lrLon, string filename)
|
|
{
|
|
using (StreamWriter sw = new StreamWriter(filename))
|
|
{
|
|
|
|
SqlConnection con = new SqlConnection(Properties.Settings.Default.ConnectionString);
|
|
con.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(ExportQuery, con);
|
|
cmd.Parameters.AddWithValue("FROM", from);
|
|
cmd.Parameters.AddWithValue("TO", to);
|
|
cmd.Parameters.AddWithValue("ULLAT", ulLat * 600000);
|
|
cmd.Parameters.AddWithValue("ULLON", ulLon * 600000);
|
|
cmd.Parameters.AddWithValue("LRLAT", lrLat * 600000);
|
|
cmd.Parameters.AddWithValue("LRLON", lrLon * 600000);
|
|
|
|
IDataReader reader = cmd.ExecuteReader();
|
|
createCsvFile(reader, sw);
|
|
reader.Close();
|
|
con.Close();
|
|
}
|
|
}
|
|
|
|
public static void createCsvFile(IDataReader reader, StreamWriter writer)
|
|
{
|
|
const string Delimiter = "\"";
|
|
const string Separator = ";";
|
|
|
|
// write header row
|
|
for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++)
|
|
{
|
|
if (columnCounter > 0)
|
|
{
|
|
writer.Write(Separator);
|
|
}
|
|
writer.Write(Delimiter + reader.GetName(columnCounter) + Delimiter);
|
|
}
|
|
writer.WriteLine(string.Empty);
|
|
|
|
// data loop
|
|
while (reader.Read())
|
|
{
|
|
// column loop
|
|
for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++)
|
|
{
|
|
if (columnCounter > 0)
|
|
{
|
|
writer.Write(Separator);
|
|
}
|
|
writer.Write(Delimiter + reader.GetValue(columnCounter).ToString().Replace('"', '\'') + Delimiter);
|
|
} // end of column loop
|
|
writer.WriteLine(string.Empty);
|
|
} // data loop
|
|
|
|
writer.Flush();
|
|
}
|
|
|
|
}
|
|
}
|