Resolved Bug with CardReader only working once Resolved Bug with Message "Card does not exist", even if it exists
1175 lines
41 KiB
C#
1175 lines
41 KiB
C#
using MySql.Data.MySqlClient;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Diagnostics;
|
|
using System.Diagnostics.Eventing.Reader;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.NetworkInformation;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Markup;
|
|
using System.Windows.Threading;
|
|
using Windows.Phone.PersonalInformation;
|
|
|
|
namespace ZKuP
|
|
{
|
|
public static class SQL
|
|
{
|
|
private static string p = "fNZG8bO+b8lbajxNUCPCIRNBap4/T5N5Qoa0Rec3P9b2EiwC5eNIwfEMjR5Fvc/W";
|
|
private static string s = "KYgjkRVn0edFDca2GbZq/A==";
|
|
private static string uSSL = "miSRZrFLxAAWlzRLx9B6Ww==";
|
|
private static string d = "xWb4X9gPEzwe76zqpysF3w==";
|
|
#if DEBUG
|
|
private static string u = "F/u2njMf6aE4krZGTjzgZw==";
|
|
private static string dTest = "e+tv3ZaP+cewOJgE7jNNlA==";
|
|
#endif
|
|
|
|
|
|
static DispatcherTimer onlineTimer = new DispatcherTimer();
|
|
|
|
//static MySqlConnection conn = new MySqlConnection(GetConnstr());
|
|
//private static MySqlConnection _conn;
|
|
//public static MySqlConnection conn
|
|
//{
|
|
// get
|
|
// {
|
|
// _conn = new MySqlConnection(GetConnstr());
|
|
// return _conn;
|
|
// }
|
|
// set { _conn = value; }
|
|
//}
|
|
public static bool isOnline = false;
|
|
|
|
static MySqlDataAdapter adp = new MySqlDataAdapter();
|
|
|
|
|
|
|
|
|
|
public static void InitSQL()
|
|
{
|
|
NetworkChange.NetworkAvailabilityChanged += NetworkChange_NetworkAvailabilityChanged;
|
|
}
|
|
|
|
|
|
public static bool CheckOnline()
|
|
{
|
|
try
|
|
{
|
|
System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
|
|
//change the following ip variable into the ip adress you are looking for
|
|
System.Net.IPAddress address = System.Net.IPAddress.Parse(GetIP());
|
|
System.Net.NetworkInformation.PingReply pong = ping.Send(address);
|
|
if (pong.Status == System.Net.NetworkInformation.IPStatus.Success)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
pong = ping.Send(address);
|
|
|
|
if (pong.Status == System.Net.NetworkInformation.IPStatus.Success)
|
|
{
|
|
return true;
|
|
}
|
|
else if (pong.Status != System.Net.NetworkInformation.IPStatus.Success && isOnline)
|
|
{
|
|
isOnline = false;
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
isOnline = false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//public static bool CheckDeviceConnection()
|
|
//{
|
|
// System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
|
|
// //change the following ip variable into the ip adress you are looking for
|
|
// System.Net.IPAddress address = System.Net.IPAddress.Parse(GetIP());
|
|
// System.Net.NetworkInformation.PingReply pong = ping.Send(address);
|
|
// if (pong.Status == System.Net.NetworkInformation.IPStatus.Success)
|
|
// {
|
|
// return true;
|
|
// }
|
|
// else
|
|
// {
|
|
// pong = ping.Send(address);
|
|
|
|
// if (pong.Status == System.Net.NetworkInformation.IPStatus.Success)
|
|
// {
|
|
// return true;
|
|
// }
|
|
// else if(pong.Status != System.Net.NetworkInformation.IPStatus.Success && isOnline)
|
|
// {
|
|
// isOnline = false;
|
|
// System.Windows.MessageBox.Show($"Server ist nicht erreichbar\nNetzwerkverbindung überprüfen", "Fehler", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
|
|
|
|
// return false;
|
|
// }
|
|
// return false;
|
|
// }
|
|
//}
|
|
|
|
static string ip = "";
|
|
private static string GetIP()
|
|
{
|
|
if (string.IsNullOrWhiteSpace(ip))
|
|
{
|
|
ip = Crypto.Decrypt(Crypto.GetHashKey("866D137B10C95A4E8D5091B0CC0EFB8F"), s);
|
|
return ip;
|
|
}
|
|
else return ip;
|
|
}
|
|
|
|
internal static string GetConnstr(bool withTimeout = false, int timeout = 5)
|
|
{
|
|
#if !DEBUG
|
|
//Mit SSL
|
|
return $"Server={GetIP()};" +
|
|
$"Uid={Crypto.Decrypt(Crypto.GetHashKey("8734FCD0D69756D3AE7154E69F8042CA"), uSSL)};" +
|
|
$"Pwd={Crypto.Decrypt(Crypto.GetHashKey("71A209CC81FDB2F458C4EC8DF7090154"), p)};" +
|
|
$"database={Crypto.Decrypt(Crypto.GetHashKey("8EB0CC56E502BFC5C19F6A0A0A53D543"), d)}" +
|
|
$";SslMode=Required;{(withTimeout ? "Connection Timeout = 10" : "")}";
|
|
|
|
//Ohne SSL
|
|
//return $"Server={GetIP()};" +
|
|
// $"Uid={Crypto.Decrypt(Crypto.GetHashKey("990C535389C3A18FFD44951DAA291161"), u)};" +
|
|
// $"Pwd={Crypto.Decrypt(Crypto.GetHashKey("71A209CC81FDB2F458C4EC8DF7090154"), p)};" +
|
|
// $"database={Crypto.Decrypt(Crypto.GetHashKey("8EB0CC56E502BFC5C19F6A0A0A53D543"), d)}" +
|
|
// $";{(withTimeout ? "Connection Timeout = 10" : "")}";
|
|
|
|
#elif DEBUG
|
|
////Ohne SSL
|
|
//return $"Server={GetIP()};" +
|
|
// $"Uid={Crypto.Decrypt(Crypto.GetHashKey("990C535389C3A18FFD44951DAA291161"), u)};" +
|
|
// $"Pwd={Crypto.Decrypt(Crypto.GetHashKey("71A209CC81FDB2F458C4EC8DF7090154"), p)};" +
|
|
// $"database={Crypto.Decrypt(Crypto.GetHashKey("B79DE37BC846D9B1054EE837AAA45D83"), dTest)}" +
|
|
// $";SslMode=none;{(withTimeout ? "Connection Timeout = 10" : "")}";
|
|
|
|
|
|
//Mit SSL
|
|
return $"Server={GetIP()};" +
|
|
$"Uid={Crypto.Decrypt(Crypto.GetHashKey("8734FCD0D69756D3AE7154E69F8042CA"), uSSL)};" +
|
|
$"Pwd={Crypto.Decrypt(Crypto.GetHashKey("71A209CC81FDB2F458C4EC8DF7090154"), p)};" +
|
|
$"database={Crypto.Decrypt(Crypto.GetHashKey("B79DE37BC846D9B1054EE837AAA45D83"), dTest)}" +
|
|
$";SslMode=Required;{(withTimeout ? $"Connection Timeout = {timeout}" : "")}";
|
|
|
|
#endif
|
|
}
|
|
public static MySqlDataAdapter GetAdapter()
|
|
{
|
|
return adp;
|
|
}
|
|
|
|
|
|
public static MySqlConnection GetConnection()
|
|
{
|
|
return new MySqlConnection(GetConnstr());
|
|
}
|
|
|
|
|
|
|
|
internal static bool IsSecureConnection()
|
|
{
|
|
try
|
|
{
|
|
|
|
//#if DEBUG
|
|
if (SQL.isOnline)
|
|
{
|
|
using (var conn = GetConnection())
|
|
{
|
|
conn.Open();
|
|
|
|
var cmd = new MySqlCommand("SHOW STATUS LIKE 'Ssl_cipher'", conn);
|
|
using (var reader = cmd.ExecuteReader())
|
|
{
|
|
string varName = "";
|
|
string varValue = "";
|
|
|
|
while (reader.Read())
|
|
{
|
|
varName = reader.GetString(0); // Variable_name
|
|
varValue = reader.GetString(1); // Value
|
|
Console.WriteLine($"{varName}: {varValue}");
|
|
}
|
|
|
|
|
|
conn.Close();
|
|
|
|
if (varValue == "ECDHE-RSA-AES256-GCM-SHA384")
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
//#endif
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//public static bool TestConnection()
|
|
//{
|
|
// return MySqlConnectionChecker.CheckConnectionAsync().Result.IsConnected;
|
|
//}
|
|
public async static Task<bool> TestConnection()
|
|
{
|
|
//if (!CheckDeviceConnection()) return false;
|
|
var online = await Task.Run(() => CheckOnline());
|
|
if (online)
|
|
{
|
|
CancellationTokenSource cts = new CancellationTokenSource();
|
|
cts.CancelAfter(TimeSpan.FromSeconds(2));
|
|
var conn = GetConnection();
|
|
|
|
using (conn)
|
|
{
|
|
try
|
|
{
|
|
conn.OpenAsync(cts.Token).Wait();
|
|
//conn.Open();
|
|
conn.Close();
|
|
|
|
isOnline = true;
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
conn.Close();
|
|
//Log.WriteLog(ex.ToString());
|
|
if (isOnline)
|
|
{
|
|
isOnline = false;
|
|
|
|
System.Windows.MessageBox.Show($"Verbindung zum Server konnte nicht hergestellt werden\n\nInterne Meldung: {ex.Message}", "Fehler", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
|
|
throw new InvalidOperationException("MySQL Server ist nicht erreichbar");
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private static void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
|
|
{
|
|
if (!onlineTimer.IsEnabled)
|
|
{
|
|
onlineTimer.Interval = TimeSpan.FromSeconds(1);
|
|
onlineTimer.Tick += OnlineTimer_Tick;
|
|
onlineTimer.Start();
|
|
}
|
|
else
|
|
{
|
|
onlineTimer.Stop();
|
|
}
|
|
}
|
|
|
|
private async static void OnlineTimer_Tick(object sender, EventArgs e)
|
|
{
|
|
await Task.Run(() => TestConnection());
|
|
}
|
|
|
|
public static async Task<int> CreateAndWriteSQL(string strSQL, List<MySqlParameter> parameters)
|
|
{
|
|
var conn = GetConnection();
|
|
MySqlCommand cmd = new MySqlCommand(strSQL, conn);
|
|
|
|
foreach (MySqlParameter parameter in parameters)
|
|
cmd.Parameters.Add(parameter);
|
|
|
|
return await SQL.WriteSQL(cmd);
|
|
}
|
|
|
|
public static async Task CreateAndWriteSQL(MySqlCommand cmd)
|
|
{
|
|
//MySqlCommand cmd = new MySqlCommand(strSQL, conn);
|
|
|
|
//foreach (MySqlParameter parameter in parameters)
|
|
// cmd.Parameters.Add(parameter);
|
|
|
|
await SQL.WriteSQL(cmd);
|
|
}
|
|
|
|
public static async void CreateAndWriteSQL(string strSQL, Dictionary<string, object> parameters)
|
|
{
|
|
var conn = GetConnection();
|
|
MySqlCommand cmd = new MySqlCommand(strSQL, conn);
|
|
|
|
foreach (KeyValuePair<string, object> parameter in parameters)
|
|
cmd.Parameters.Add(new MySqlParameter(parameter.Key, parameter.Value));
|
|
|
|
await SQL.WriteSQL(cmd);
|
|
}
|
|
|
|
public static async Task CreateAndWriteSQLwithSignature(MySqlCommand cmd, byte[] signature)
|
|
{
|
|
//MySqlCommand cmd = new MySqlCommand(strSQL, conn);
|
|
|
|
//foreach (MySqlParameter parameter in parameters)
|
|
// cmd.Parameters.Add(parameter);
|
|
|
|
if (signature != null && signature.Length > 0)
|
|
cmd.Parameters.Add("@signature", MySqlDbType.LongBlob).Value = signature;
|
|
else cmd.Parameters.Add("@signature", MySqlDbType.LongBlob).Value = new byte[1];
|
|
|
|
await SQL.WriteSQL(cmd);
|
|
}
|
|
|
|
|
|
|
|
public static MySqlCommand CreateAndReturnSQLCommand(string strSQL, List<MySqlParameter> parameters)
|
|
{
|
|
var conn = GetConnection();
|
|
MySqlCommand cmd = new MySqlCommand(strSQL, conn);
|
|
|
|
foreach (MySqlParameter parameter in parameters)
|
|
cmd.Parameters.Add(parameter);
|
|
|
|
return cmd;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static async Task<DataTable> WriteSQL(string SQLQuery, DataTable list)
|
|
{
|
|
var filter = list.DefaultView.RowFilter;
|
|
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
try
|
|
{
|
|
var table = SQLQuery.Substring(SQLQuery.IndexOf($"{MainWindow.table}.") + MainWindow.table.Length + 1);
|
|
table = table.Substring(0, table.IndexOf(' '));
|
|
|
|
using (conn)
|
|
{
|
|
using (adp)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
adp.UpdateCommand = new MySqlCommand(SQLQuery, conn);
|
|
|
|
adp.Update(list);
|
|
|
|
list.AcceptChanges();
|
|
}
|
|
|
|
|
|
if (table.ToLower() == "firmen" || table.ToLower() == "besucher" || table.ToLower() == "family")
|
|
{
|
|
MySqlCommand updateCmd = new MySqlCommand($"UPDATE {MainWindow.table}.changes SET `timestamp` = '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' WHERE `table` = '{table}'", conn);
|
|
using (updateCmd)
|
|
{
|
|
updateCmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
|
|
conn.Close();
|
|
}
|
|
|
|
list.DefaultView.RowFilter = filter;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
conn.Close();
|
|
Log.WriteLog(ex.ToString());
|
|
return list;
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
public static async Task WriteSQL(string SQLQuery)
|
|
{
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
try
|
|
{
|
|
var table = SQLQuery.Substring(SQLQuery.IndexOf($"{MainWindow.table}.") + MainWindow.table.Length + 1);
|
|
table = table.Substring(0, table.IndexOf(' '));
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
conn.Open();
|
|
|
|
MySqlCommand cmd = new MySqlCommand(SQLQuery, conn);
|
|
using (cmd)
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
if (table.ToLower() == "firmen" || table.ToLower() == "besucher" || table.ToLower() == "family")
|
|
{
|
|
MySqlCommand updateCmd = new MySqlCommand($"UPDATE {MainWindow.table}.changes SET `timestamp` = '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' WHERE `table` = '{table}'", conn);
|
|
using (updateCmd)
|
|
{
|
|
updateCmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
conn.Close();
|
|
Log.WriteLog(ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public static async Task<int> WriteSQLwithReturn(string SQLQuery)
|
|
{
|
|
if (SQL.isOnline) {
|
|
var conn = GetConnection();
|
|
var result = 0;
|
|
|
|
try
|
|
{
|
|
var table = SQLQuery.Substring(SQLQuery.IndexOf($"{MainWindow.table}.") + MainWindow.table.Length + 1);
|
|
table = table.Substring(0, table.IndexOf(' '));
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
conn.Open();
|
|
|
|
MySqlCommand cmd = new MySqlCommand(SQLQuery, conn);
|
|
using (cmd)
|
|
{
|
|
result = cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
if (table.ToLower() == "firmen" || table.ToLower() == "besucher" || table.ToLower() == "family")
|
|
{
|
|
MySqlCommand updateCmd = new MySqlCommand($"UPDATE {MainWindow.table}.changes SET `timestamp` = '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' WHERE `table` = '{table}'", conn);
|
|
using (updateCmd)
|
|
{
|
|
updateCmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
|
|
return result;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
conn.Close();
|
|
Log.WriteLog(ex.ToString());
|
|
return result;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
public static async Task WriteSQL(string SQLQuery, byte[] data)
|
|
{
|
|
if (SQL.isOnline) {
|
|
var conn = GetConnection();
|
|
|
|
try
|
|
{
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
conn.Open();
|
|
|
|
MySqlCommand cmd = new MySqlCommand(SQLQuery, conn);
|
|
using (cmd)
|
|
{
|
|
cmd.Parameters.Add("@signature", MySqlDbType.LongBlob).Value = data;
|
|
cmd.ExecuteNonQuery();
|
|
conn.Close();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
conn.Close();
|
|
Log.WriteLog(ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public static async Task<int> WriteSQL(MySqlCommand mySqlCommand)
|
|
{
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
try
|
|
{
|
|
var table = mySqlCommand.CommandText.Substring(mySqlCommand.CommandText.IndexOf($"{MainWindow.table}.") + MainWindow.table.Length + 1);
|
|
table = table.Substring(0, table.IndexOf(' '));
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
conn.Open();
|
|
|
|
mySqlCommand.Connection = conn;
|
|
var cmd = mySqlCommand;
|
|
using (cmd)
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
|
|
if (table.ToLower() == "firmen" || table.ToLower() == "besucher" || table.ToLower() == "family")
|
|
{
|
|
MySqlCommand updateCmd = new MySqlCommand($"UPDATE {MainWindow.table}.changes SET `timestamp` = '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' WHERE `table` = '{table}'", conn);
|
|
using (updateCmd)
|
|
{
|
|
updateCmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
MySqlCommand Cmd = new MySqlCommand($"SELECT LAST_INSERT_ID()", conn);
|
|
int queryResult = 0;
|
|
using (Cmd)
|
|
{
|
|
int.TryParse(Cmd.ExecuteScalar().ToString(), out queryResult);
|
|
}
|
|
|
|
|
|
conn.Close();
|
|
|
|
return queryResult;
|
|
}
|
|
}
|
|
#pragma warning disable CS0168 // Variable ist deklariert, wird jedoch niemals verwendet
|
|
catch (Exception ex)
|
|
#pragma warning restore CS0168 // Variable ist deklariert, wird jedoch niemals verwendet
|
|
{
|
|
#if DEBUG
|
|
conn.Close();
|
|
return -1;
|
|
//throw;
|
|
#else
|
|
conn.Close();
|
|
if (!ex.InnerException.Message.Contains("SocketException")) Log.WriteLog(ex.ToString());
|
|
return -1;
|
|
#endif
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
public static async Task<DataTable> ReadSQL(string SQLCommand, DataTable list)
|
|
{
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
var filter = list.DefaultView.RowFilter;
|
|
try
|
|
{
|
|
using (conn)
|
|
{
|
|
using (adp)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
adp.SelectCommand = new MySqlCommand(SQLCommand, conn);
|
|
|
|
list.Clear();
|
|
adp.Fill(list);
|
|
conn.Close();
|
|
}
|
|
}
|
|
|
|
list.DefaultView.RowFilter = filter;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
conn.Close();
|
|
Log.WriteLog(ex.ToString());
|
|
return list;
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
public static async Task<DataTable> ReadSQL(string SQLCommand)
|
|
{
|
|
DataTable list = new DataTable();
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
|
|
try
|
|
{
|
|
using (conn)
|
|
{
|
|
using (adp)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
adp.SelectCommand = new MySqlCommand(SQLCommand, conn);
|
|
|
|
list.Clear();
|
|
adp.Fill(list);
|
|
conn.Close();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
conn.Close();
|
|
Log.WriteLog(ex.ToString());
|
|
return list;
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
|
|
public static string ReadSingleValue(string SQLCommand)
|
|
{
|
|
object queryResult = null;
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (conn)
|
|
{
|
|
using (cmd)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
queryResult = cmd.ExecuteScalar();//Return an object so first check for null
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
|
|
}
|
|
if (queryResult != null)
|
|
return queryResult.ToString();
|
|
else
|
|
return "";
|
|
}
|
|
|
|
public async static Task<string> ReadSingleValueAsync(string SQLCommand)
|
|
{
|
|
object queryResult = null;
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (cmd)
|
|
{
|
|
conn.Open();
|
|
queryResult = await cmd.ExecuteScalarAsync();//Return an object so first check for null
|
|
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
|
|
|
|
if (queryResult != null)
|
|
return queryResult.ToString();
|
|
else
|
|
return "";
|
|
}
|
|
|
|
public static System.Drawing.Bitmap ReadSingleByteArr(string SQLCommand)
|
|
{
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
//UInt32 FileSize;
|
|
//byte[] rawData;
|
|
System.Drawing.Bitmap image = null;
|
|
|
|
using (conn)
|
|
{
|
|
using (cmd)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
|
|
MySql.Data.MySqlClient.MySqlDataReader myData = cmd.ExecuteReader();
|
|
using (myData)
|
|
{
|
|
while (myData.Read())
|
|
{
|
|
if (myData[0] == DBNull.Value)
|
|
return null;
|
|
|
|
byte[] data = (byte[])myData[0]; // 0 is okay if you only selecting one column
|
|
//And use:
|
|
//using (System.IO.MemoryStream ms = new System.IO.MemoryStream(data))
|
|
//{
|
|
System.IO.MemoryStream ms = new System.IO.MemoryStream(data);
|
|
image = new System.Drawing.Bitmap(ms);
|
|
//}
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
|
|
//if (rawData != null)
|
|
// return (byte[])rawData;
|
|
//else
|
|
return image;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static async Task<List<string>> ReadListString(string SQLCommand, int ColumnID = 0)
|
|
{
|
|
List<string> queryResult = new List<string>();
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
|
|
using (MySqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
using (cmd)
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (!reader.IsDBNull(ColumnID))
|
|
queryResult.Add(reader.GetValue(ColumnID).ToString());
|
|
else
|
|
queryResult.Add("");
|
|
}
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
return queryResult;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Read two Columns, separated by ';'
|
|
/// </summary>
|
|
/// <param name="SQLCommand"></param>
|
|
/// <param name="ColumnID"></param>
|
|
/// <returns></returns>
|
|
public static async Task<List<string>> ReadDateTimeAndStringList(string SQLCommand, int ColumnID = 0)
|
|
{
|
|
List<string> queryResult = new List<string>();
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
|
|
using (MySqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
using (cmd)
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
queryResult.Add(reader.GetDateTime(ColumnID).ToString("yyyy-MM-dd HH:mm:ss") + ";" + reader.GetValue(ColumnID + 1).ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
return queryResult;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Read two Columns, separated by ';' or choose Seperator
|
|
/// </summary>
|
|
/// <param name="SQLCommand"></param>
|
|
/// <param name="Seperator"></param>
|
|
/// <param name="ColumnID"></param>
|
|
/// <returns></returns>
|
|
public static async Task<List<string>> ReadListStringTwoColumns(string SQLCommand, string Seperator = ";", int ColumnID = 0)
|
|
{
|
|
List<string> queryResult = new List<string>();
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
|
|
using (MySqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
using (cmd)
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (!reader.IsDBNull(ColumnID) && !reader.IsDBNull(ColumnID + 1))
|
|
queryResult.Add(reader.GetValue(ColumnID).ToString() + $"{Seperator}" + reader.GetValue(ColumnID + 1).ToString());
|
|
else
|
|
queryResult.Add("");
|
|
}
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
return queryResult;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Read two Columns, separated by ';' or choose Seperator
|
|
/// </summary>
|
|
/// <param name="SQLCommand"></param>
|
|
/// <param name="Seperator"></param>
|
|
/// <param name="ColumnID"></param>
|
|
/// <returns></returns>
|
|
public static async Task<List<string>> ReadListStringMultipleColumns(string SQLCommand, int ColumnCount = 3, string SeperatorOne = ";", string SeperatorTwo = ";", string SeperatorThree = ";", string SeperatorFour = ";", int ColumnOne = 0, int ColumnTwo = 1, int ColumnThree = 2, int ColumnFour = 3, int ColumnFive = 4, string SeperatorFive = ";", int ColumnSix = 5)
|
|
{
|
|
List<string> queryResult = new List<string>();
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
|
|
using (MySqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
using (cmd)
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
switch (ColumnCount)
|
|
{
|
|
case 1:
|
|
queryResult.Add(reader.GetValue(ColumnOne).ToString());
|
|
break;
|
|
case 2:
|
|
queryResult.Add(reader.GetValue(ColumnOne).ToString() + $"{SeperatorOne}" + reader.GetValue(ColumnTwo).ToString());
|
|
break;
|
|
case 3:
|
|
queryResult.Add(reader.GetValue(ColumnOne).ToString() + $"{SeperatorOne}" + reader.GetValue(ColumnTwo).ToString() + $"{SeperatorTwo}" + reader.GetValue(ColumnThree).ToString());
|
|
break;
|
|
case 4:
|
|
queryResult.Add(reader.GetValue(ColumnOne).ToString() + $"{SeperatorOne}" + reader.GetValue(ColumnTwo).ToString() + $"{SeperatorTwo}" + reader.GetValue(ColumnThree).ToString() + $"{SeperatorThree}" + reader.GetValue(ColumnFour).ToString());
|
|
break;
|
|
case 5:
|
|
queryResult.Add(reader.GetValue(ColumnOne).ToString() + $"{SeperatorOne}" + reader.GetValue(ColumnTwo).ToString() + $"{SeperatorTwo}" + reader.GetValue(ColumnThree).ToString() + $"{SeperatorThree}" + reader.GetValue(ColumnFour).ToString() + $"{SeperatorFour}" + reader.GetValue(ColumnFive).ToString());
|
|
break;
|
|
case 6:
|
|
queryResult.Add(reader.GetValue(ColumnOne).ToString() + $"{SeperatorOne}" + reader.GetValue(ColumnTwo).ToString() + $"{SeperatorTwo}" + reader.GetValue(ColumnThree).ToString() + $"{SeperatorThree}" + reader.GetValue(ColumnFour).ToString() + $"{SeperatorFour}" + reader.GetValue(ColumnFive).ToString() + $"{SeperatorFive}" + reader.GetValue(ColumnSix).ToString());
|
|
break;
|
|
default:
|
|
queryResult.Add(reader.GetValue(ColumnOne).ToString());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
return queryResult;
|
|
}
|
|
|
|
|
|
|
|
public static async Task<Dictionary<int, string>> ReadDictionary(string SQLCommand, int FirstColumn, int SecondColumn)
|
|
{
|
|
Dictionary<int, string> queryResult = new Dictionary<int, string>();
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
|
|
using (MySqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
using (cmd)
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (FirstColumn == 0 && SecondColumn == 0)
|
|
{
|
|
if (!queryResult.ContainsKey(0))
|
|
queryResult.Add(0, reader.GetValue(SecondColumn).ToString());
|
|
}
|
|
else
|
|
{
|
|
var x = reader.GetInt32(FirstColumn);
|
|
|
|
if (!queryResult.ContainsKey(x))
|
|
queryResult.Add(x, reader.GetValue(SecondColumn).ToString());
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
}
|
|
|
|
return queryResult;
|
|
}
|
|
|
|
public static async Task<Dictionary<string, string>> ReadDictionary2(string SQLCommand, int FirstColumn, int SecondColumn)
|
|
{
|
|
Dictionary<string, string> queryResult = new Dictionary<string, string>();
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
try
|
|
{
|
|
MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn);
|
|
|
|
using (conn)
|
|
{
|
|
conn.Close();
|
|
|
|
conn.Open();
|
|
|
|
using (MySqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
using (cmd)
|
|
{
|
|
var firstVal = "";
|
|
var secondVal = "";
|
|
|
|
while (reader.Read())
|
|
{
|
|
if (reader.IsDBNull(FirstColumn))
|
|
firstVal = "";
|
|
else firstVal = reader.GetValue(FirstColumn).ToString();
|
|
|
|
if (reader.IsDBNull(SecondColumn))
|
|
secondVal = "";
|
|
else secondVal = reader.GetValue(SecondColumn).ToString();
|
|
|
|
if (!queryResult.ContainsKey(firstVal))
|
|
queryResult.Add(firstVal, secondVal);
|
|
|
|
|
|
//if (!reader.IsDBNull(FirstColumn) && !reader.IsDBNull(SecondColumn))
|
|
// if (!queryResult.ContainsKey(reader.GetValue(FirstColumn).ToString()))
|
|
// queryResult.Add(reader.GetValue(FirstColumn).ToString(), reader.GetValue(SecondColumn).ToString());
|
|
// else if (reader.IsDBNull(FirstColumn) && !reader.IsDBNull(SecondColumn))
|
|
// continue;// queryResult.Add("", reader.GetString(SecondColumn));
|
|
// else if (!reader.IsDBNull(FirstColumn) && reader.IsDBNull(SecondColumn))
|
|
// if (!queryResult.ContainsKey(reader.GetValue(FirstColumn).ToString()))
|
|
// queryResult.Add(reader.GetValue(FirstColumn).ToString(), "");
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
conn.Close();
|
|
}
|
|
|
|
return queryResult;
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return new Dictionary<string, string>();
|
|
}
|
|
}
|
|
return queryResult;
|
|
}
|
|
|
|
|
|
public static async Task<bool> RowExists(string Table, string Column, string Value, bool isLike = false, string additionalWHERE = "")
|
|
{
|
|
if (SQL.isOnline)
|
|
{
|
|
var conn = GetConnection();
|
|
|
|
MySqlCommand cmd;
|
|
|
|
if (!isLike)
|
|
{
|
|
cmd = new MySql.Data.MySqlClient.MySqlCommand($"SELECT 1 FROM {Table} WHERE {Column} = @pValue {additionalWHERE} LIMIT 1", conn);
|
|
cmd.Parameters.Add(new MySqlParameter("@pValue", Value));
|
|
}
|
|
else
|
|
{
|
|
cmd = new MySql.Data.MySqlClient.MySqlCommand($"SELECT 1 FROM {Table} WHERE {Column} LIKE @pValue {additionalWHERE} LIMIT 1", conn);
|
|
cmd.Parameters.Add(new MySqlParameter("@pValue", $"%{Value}%"));
|
|
}
|
|
|
|
|
|
|
|
conn.Open();
|
|
var result = cmd.ExecuteScalar();
|
|
conn.Close();
|
|
|
|
return result != null;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static string MySQLCommandToString(MySqlCommand mySqlCommand)
|
|
{
|
|
string cmdText = mySqlCommand.CommandText;
|
|
|
|
foreach (MySqlParameter p in mySqlCommand.Parameters)
|
|
{
|
|
var repl = p.Value != null ? p.Value.ToString() : "";
|
|
cmdText = cmdText.Replace($"@{p.ParameterName},", $"'{repl}',");
|
|
cmdText = cmdText.Replace($"@{p.ParameterName} ", $"'{repl}' ");
|
|
|
|
if (cmdText.EndsWith($"@{p.ParameterName}"))
|
|
cmdText = cmdText.Replace($"@{p.ParameterName}", $"'{repl}'");
|
|
}
|
|
|
|
return cmdText;
|
|
}
|
|
|
|
|
|
//public static async Task<DataTable> ReadAllData(DataTable list)
|
|
//{
|
|
// var filter = list.DefaultView.RowFilter;
|
|
|
|
// using (conn)
|
|
// {
|
|
// if (conn.State == ConnectionState.Open) conn.Close();
|
|
|
|
// conn.Open();
|
|
// adp.SelectCommand = new MySqlCommand("select PersNr,Name,Vorname,Abteilung,o.Datum,Beginn,Gehen,Tagescode,Arbeitsmuster,Zuweisung,Bemerkung,Telefon,AnzahlLizenzen,ZugNameB from pep_tool.mitarbeiter_static p left join pep_tool.mitarbeiter_change o ON o.mitarbeiter_static_PersNr = p.PersNr ORDER BY Name", conn);
|
|
// list.Clear();
|
|
// adp.Fill(list);
|
|
// conn.Close();
|
|
// }
|
|
|
|
// list.DefaultView.RowFilter = filter;
|
|
// return list;
|
|
//}
|
|
|
|
//public static async Task<DataTable> ReadAllData(string filter = "")
|
|
//{
|
|
// try
|
|
// {
|
|
// DataTable list = new DataTable("UserList");
|
|
|
|
// using (conn)
|
|
// {
|
|
// if (conn.State == ConnectionState.Open) conn.Close();
|
|
|
|
// conn.Open();
|
|
// adp.SelectCommand = new MySqlCommand("select PersNr,Name,Vorname,Abteilung,o.Datum,Beginn,Gehen,Tagescode,Arbeitsmuster,Zuweisung,Bemerkung,Telefon,AnzahlLizenzen,ZugNameB from pep_tool.mitarbeiter_static p left join pep_tool.mitarbeiter_change o ON o.mitarbeiter_static_PersNr = p.PersNr ORDER BY Name", conn);
|
|
// list.Columns.Clear();
|
|
// adp.Fill(list);
|
|
// conn.Close();
|
|
// }
|
|
|
|
// list.DefaultView.RowFilter = filter;
|
|
// return list;
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// System.Diagnostics.Debug.WriteLine(ex);
|
|
// return await ReadAllData();
|
|
// }
|
|
//}
|
|
}
|
|
}
|