using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.IO;
using System.Net.Sockets;
using System.Net;
using System.Drawing;
namespace Mip
{
class classSQL
{
//Deklaracia premennych pre pristup k mySQL cez MYSQL.data
private static MySqlConnection MyConnection;
private static MySqlCommand MyCommand;
public static MySqlDataReader myData;
/////////////////////////////////////////////////////////////////////
///
/// Export súboru (formulára) z SQL na disk
///
/// Nazov súbora v SQL
/// Path\Názov súbora , pod ktorým bude uložený na disk
public static void ExportFormToHDD(string _nazov,string _filepath)
{
string ServerIP = classUser.MariaDBServerIPAddress;
MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;");
byte[] FilewData;
string CmdString = ("SELECT `DataSuboru`,(LENGTH (`DataSuboru`)) AS `size` FROM `tabformular` WHERE `NazovSuboru` LIKE '%"+_nazov+"%';");
MyCommand = new MySqlCommand(CmdString, MyConnection);
MyConnection.Open();
myData = MyCommand.ExecuteReader();
myData.Read();
FilewData = new byte[Convert.ToInt32(myData[1])];
Array.Copy((byte[])myData[0], FilewData, Convert.ToInt32(myData[1]));
FileStream fs;
fs = new FileStream(_filepath, FileMode.CreateNew, FileAccess.Write);
fs.Write(FilewData, 0, FilewData.Length);
MyConnection.Close();
fs.Close();
}
///
/// Uloženie výkresu z RAM (byte[] _VykresData) do SQL
///
/// ID výrobku
/// Index výkresu z daného výrobku (výrobok môže obsahovať viacero výkresov)
/// pole byte[], v ktorom je uložený obrázok
public static void SaveVykresToSQL(int _IDVyrobok,int _IndexVykresu, byte [] _VykresData)
{
string ServerIP = classUser.MariaDBServerIPAddress;
MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;");
string CmdString = "INSERT INTO `mip`.`tabvykres` (IDVyrobok,IndexVykresu,VykresData) VALUES(@IDVyrobok,@IndexVykresu,@VykresData)";
MyCommand = new MySqlCommand(CmdString, MyConnection);
MyCommand.Parameters.Add("@IDVyrobok", MySqlDbType.Int32);
MyCommand.Parameters.Add("@IndexVykresu", MySqlDbType.Int32);
MyCommand.Parameters.Add("@VykresData", MySqlDbType.MediumBlob);
MyCommand.Parameters["@IDVyrobok"].Value = _IDVyrobok;
MyCommand.Parameters["@IndexVykresu"].Value = _IndexVykresu;
MyCommand.Parameters["@VykresData"].Value = _VykresData;
MyConnection.Open();
MyCommand.ExecuteNonQuery();
MyConnection.Close();
}
///
/// Export výkresu z SQL na HDD
///
/// ID výrobku
/// Index výkresu z daného výrobku (výrobok môže obsahovať viacero výkresov)
/// Path\Názov súboru, do ktorého je výkres vyexportovaný
public static void ExportVykresToHDD(int _IDVyrobok,int _indexVykresu, string _filepath)
{
string ServerIP = classUser.MariaDBServerIPAddress;
MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;");
byte[] FilewData;
string CmdString = ("SELECT `VykresData`,(LENGTH (`VykresData`)) AS `size` FROM `tabvykres` WHERE `IDVyrobok` = " + _IDVyrobok.ToString() + " AND `IndexVykresu`= (SELECT min(`IndexVykresu`) FROM `tabvykres` WHERE `IDVyrobok` = " + _IDVyrobok.ToString() + ");");
MyCommand = new MySqlCommand(CmdString, MyConnection);
MyConnection.Open();
myData = MyCommand.ExecuteReader();
myData.Read();
FilewData = new byte[Convert.ToInt32(myData[1])];
Array.Copy((byte[])myData[0], FilewData, Convert.ToInt32(myData[1]));
RotateImage(ref FilewData);
FileStream fs;
fs = new FileStream(_filepath, FileMode.CreateNew, FileAccess.Write);
fs.Write(FilewData, 0, FilewData.Length);
MyConnection.Close();
fs.Close();
}
public static void RotateImage(ref byte[] _filedata)
{
MemoryStream msOld = new MemoryStream(_filedata);
Image img = Image.FromStream(msOld);
if(img.Height>img.Width)
{
img.RotateFlip(RotateFlipType.Rotate90FlipNone);
MemoryStream msNew = new MemoryStream();
img.Save(msNew, System.Drawing.Imaging.ImageFormat.Jpeg);
_filedata = msNew.ToArray();
}
}
///
/// Uloženie formulára z RAM do SQL
///
/// Názov formulára
/// pole byte[], v ktorom je uložený formulár
public static void SaveFormToSQL(string _meno,byte[] _FormularData)
{
string ServerIP = classUser.MariaDBServerIPAddress;
MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;");
String poznamka = Microsoft.VisualBasic.Interaction.InputBox(null, "Zadaj poznámku k formuláru:");
string CmdString = "INSERT INTO `mip`.`tabformular` (NazovSuboru,DataSuboru,PoznamkaFormulara) VALUES(@NazovSuboru,@DataSuboru,@PoznamkaFormulara)";
MyCommand = new MySqlCommand(CmdString, MyConnection);
MyCommand.Parameters.Add("@NazovSuboru", MySqlDbType.String);
MyCommand.Parameters.Add("@DataSuboru", MySqlDbType.MediumBlob);
MyCommand.Parameters.Add("@PoznamkaFormulara", MySqlDbType.String);
MyCommand.Parameters["@NazovSuboru"].Value = _meno;
MyCommand.Parameters["@DataSuboru"].Value = _FormularData;
MyCommand.Parameters["@PoznamkaFormulara"].Value = poznamka;
MyConnection.Open();
MyCommand.ExecuteNonQuery();
MyConnection.Close();
}
///
/// Načítanie výkresu z SQL do pictureBoxu
/// pictureBox=VykresZSQLDoPictureBox(int _IDVykresu);
///
/// ID výrobku
public static System.Drawing.Image VykresZSQLDoPictureBox(int _IDVykresu)
{
PictureBox _pictureBox = new PictureBox();
string CmdString = ("SELECT `VykresData` FROM `tabvykres` WHERE `IDVykres` = "
+ _IDVykresu.ToString()
+ ";");
DataTable frmdatatable = new DataTable();
classSQL.SQL(CmdString, out frmdatatable);
DataRow dtrw = frmdatatable.Rows[0];
MemoryStream ms = new MemoryStream((byte[])dtrw["VykresData"]);
System.Drawing.Image img;
img = System.Drawing.Image.FromStream(ms);
return img;
}
///
/// Uloženie (alebo nahradenie ak uz existuje) nákresu z RAM (byte[] _NakresData) do SQL. Pri nahradení pôvodný obrázok vymaže a potom vloží nový.
///
/// ID žiadanka
/// pole byte[], v ktorom je uložený nákres
public static void SaveNakresToSQL(int _IDZiadanka, byte[] _NakresData)
{
string ServerIP = classUser.MariaDBServerIPAddress;
MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;");
classSQL.SQL("DELETE FROM `mip`.`tabziadankanakres` WHERE `IDZiadanka` = " + _IDZiadanka.ToString());
string CmdString = "INSERT INTO `mip`.`tabziadankanakres` (`IDZiadanka`, `NakresData`) VALUES(@IDZiadanka, @NakresData)";
MyCommand = new MySqlCommand(CmdString, MyConnection);
MyCommand.Parameters.Add("@IDZiadanka", MySqlDbType.Int32);
MyCommand.Parameters.Add("@NakresData", MySqlDbType.MediumBlob);
MyCommand.Parameters["@IDZiadanka"].Value = _IDZiadanka;
MyCommand.Parameters["@NakresData"].Value = _NakresData;
MyConnection.Open();
if(_NakresData != null) MyCommand.ExecuteNonQuery();
MyConnection.Close();
}
// pripojenie cez mysqldata.dll
private static MySqlConnection MariaDBConnection;
private static DataTable ReturnDataTable;
private static MySqlDataAdapter MariaDBdataAdapter;
private static MySqlCommandBuilder MariaDBCommandBuilder;
private static Int32 MariaDBLastIndex = 0;
public static Int32 intPocetNaStranu = 0;
public static Int32 intCelkovyPocetZazanmov = 0;
// Nepouziva sa lebo vsetky IP adresy su x.x.1.x
/*
//Funkcia zistí cíšlo skupiny zo sieťovej adresy 192.168.???.1
private static string IPGroup()
{
string _IPGroup="";
int intAddress = BitConverter.ToInt32(IPAddress.Parse(LocalIPAddress().ToString()).GetAddressBytes(), 0);
_IPGroup = ((intAddress & 0x00ff0000) >> 16).ToString();
return _IPGroup;
}
private static IPAddress LocalIPAddress()
{
if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
{
return null;
}
IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
return host
.AddressList
.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
}
*/
// Nepouziva sa lebo vsetky IP adresy su x.x.1.x
//stara verzia na siet 192.168.2.39 a 192.168.1.39
/*
private static void ConnectMariaDB()
{
if (MariaDBConnection != null)
MariaDBConnection.Close();
string connStr = String.Format("server={0}; database={1}; user id={2}; password={3}; pooling=false", "192.168." + IPGroup() + ".39", "mip", "mip", "mip@2013");
MariaDBConnection = new MySqlConnection(connStr);
try
{
MariaDBConnection = new MySqlConnection(connStr);
MariaDBConnection.Open();
}
catch (MySqlException ex)
{
DialogResult dr = MessageBox.Show("Chyba pripojenia na server: " + ex.Message
+ Environment.NewLine
+ Environment.NewLine
+ "Po stačení tlačidla Yes, sa program skúsi pripojiť cez internet!"
+ Environment.NewLine
+ "Tlačidlo No ukončí program MIP"
, "MariaDB server nedostupný!", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
string ServerIP = "87.197.164.107";
connStr = String.Format("server={0}; database={1}; user id={2}; password={3}; pooling=false", ServerIP, "mip", "mip", "mip@2013");
MariaDBConnection = new MySqlConnection(connStr);
try
{
MariaDBConnection = new MySqlConnection(connStr);
MariaDBConnection.Open();
}
catch (MySqlException ex2)
{
MessageBox.Show("Chyba pripojenia na server cez internet: " + ex2.Message
+ Environment.NewLine
+ Environment.NewLine
+ "Program Mip bude ukončený! ");
Environment.Exit(0);
}
}
else Environment.Exit(0);
}
}
*/
private static void ConnectMariaDB()
{
if (MariaDBConnection != null)
MariaDBConnection.Close();
string connStr = String.Format("server={0}; database={1}; user id={2}; password={3}; pooling={4}; default command timeout={5};", classUser.MariaDBServerIPAddress, "mip", "mip", "mip@2013", "false", "3000");
MariaDBConnection = new MySqlConnection(connStr);
try
{
MariaDBConnection = new MySqlConnection(connStr);
MariaDBConnection.Open();
}
catch (MySqlException ex)
{
DialogResult dr = MessageBox.Show("Chyba pripojenia na server: " + ex.Message
+ Environment.NewLine
+ Environment.NewLine
+ "Po stačení tlačidla Yes, sa program skúsi zistiť IP adresu servera MariaDB!"
+ Environment.NewLine
+ "Tlačidlo No ukončí program MIP"
, "MariaDB server nedostupný!", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
classGlobal.SetServerIP();
connStr = String.Format("server={0}; database={1}; user id={2}; password={3}; pooling={4}; default command timeout={5};", classUser.MariaDBServerIPAddress, "mip", "mip", "mip@2013", "false", "3000");
MariaDBConnection = new MySqlConnection(connStr);
try
{
MariaDBConnection = new MySqlConnection(connStr);
MariaDBConnection.Open();
}
catch (MySqlException ex2)
{
MessageBox.Show("Chyba pripojenia na server MariaDB: " + ex2.Message
+ Environment.NewLine
+ Environment.NewLine
+ "Program Mip bude ukončený! ");
Environment.Exit(0);
}
}
else Environment.Exit(0);
}
}
/*
private void FindIP()
{
}
*/
private static void DisConnectMariaDB()
{
MariaDBConnection.Close();
}
private static void MariaDBCommand(string Command, bool Zistipocet)
{
//koli zrychleniu je nastavene limit 500
string cmd = Command.ToString();
if (cmd.Substring(0, 6).ToUpper() == "SELECT")
{
if (!cmd.Contains("LIMIT"))
{
if (cmd.EndsWith(";")) cmd = cmd.Remove(cmd.Length - 1, 1) + " LIMIT " + classUser.LimitSqlPrikazu.ToString() + ";";
else cmd = cmd + " LIMIT " + classUser.LimitSqlPrikazu.ToString() + ";";
}
}
Command = cmd;
try
{
DataTable celkovypocet = new DataTable();
MariaDBdataAdapter = new MySqlDataAdapter(Command, MariaDBConnection);
MariaDBCommandBuilder = new MySqlCommandBuilder(MariaDBdataAdapter);
if (Zistipocet == true)
{
MariaDBdataAdapter.Fill(celkovypocet);
intCelkovyPocetZazanmov = celkovypocet.Rows.Count;
}
}
catch (MySqlException ex)
{
MessageBox.Show("MariaDB Chyba: " + ex.Message);
}
}
///
/// MariaDB poziadavka - s vystupom celej tabulky(DataTable)
///
/// Prikaz do MariaDB
/// Vratena tabulka udajov
public static void SQL(string _cmd, out DataTable outDataTable)
{
if (classUser.mainWindowState != FormWindowState.Minimized && classUser.boolComputerAsleep == false)
{
//classGlobal.wait(true);
ConnectMariaDB();
MariaDBCommand(_cmd,true);
ReturnDataTable = new DataTable();
MariaDBdataAdapter.Fill(ReturnDataTable);
outDataTable = ReturnDataTable;
DisConnectMariaDB();
//classGlobal.wait(false);
}
else outDataTable = null;
}
///
/// MariaDB poziadavka - pouzitie pri strankovani s vystupom tabulky(DataTable)
///
/// Prikaz do MariaDB
/// Zaciatocny riadok tabulky
/// Pocet riadkov na jednu stranu
/// Vratena tabulka udajov
public static void SQL(string _cmd,Int32 _intStart, Int32 _intCount, out DataTable outDataTable)
{
if (classUser.mainWindowState != FormWindowState.Minimized && classUser.boolComputerAsleep == false)
{
//classGlobal.wait(true);
ConnectMariaDB();
MariaDBCommand(_cmd,true);
ReturnDataTable = new DataTable();
MariaDBdataAdapter.Fill(_intStart, _intCount, ReturnDataTable);
outDataTable = ReturnDataTable;
DisConnectMariaDB();
//classGlobal.wait(false);
}
else outDataTable = null;
}
///
/// MariaDB poziadavka - pouzitie pre INSERT s vystupom posledneho vkladaneho indexu
///
/// Prikaz do MariaDB (Mal by to byt INSERT)
/// Vrateny index posledneho vkladaneho zaznamu
public static void SQL(string _cmd, out Int32 outLastIndex)
{
if (classUser.mainWindowState != FormWindowState.Minimized && classUser.boolComputerAsleep == false)
{
//classGlobal.wait(true);
ConnectMariaDB();
MariaDBCommand(_cmd,true);
object Index = MySqlHelper.ExecuteScalar(MariaDBConnection, "SELECT LAST_INSERT_ID();");
if (Index != null) MariaDBLastIndex = Convert.ToInt32(Index);
else MariaDBLastIndex = 0;
outLastIndex = MariaDBLastIndex;
DisConnectMariaDB();
//classGlobal.wait(false);
}
else outLastIndex = 0;
}
///
/// MariaDB poziadavka - pouzitie pre vystup jednej hodnoty z MariaDB v textovej podobe (moze to byt hodnota, cislo, suma, pocet....)
///
/// Prikaz do MariaDB (prikaz by mal byt nastaveny na vystup jedinej hodnoty)
/// Vratena textova hodnota
public static void SQL(string _cmd, out string outString)
{
if (classUser.mainWindowState != FormWindowState.Minimized && classUser.boolComputerAsleep == false)
{
//classGlobal.wait(true);
ConnectMariaDB();
MariaDBCommand(_cmd,true);
ReturnDataTable = new DataTable();
MariaDBdataAdapter.Fill(ReturnDataTable);
if (intCelkovyPocetZazanmov != 1) outString = "";
else outString = ReturnDataTable.Rows[0][0].ToString();
DisConnectMariaDB();
//classGlobal.wait(false);
}
else outString = "";
}
///
/// MariaDB poziadavka - pouzitie pre UPDATE alebo INSERT (nevracia ziadne hodnoty)
///
/// Prikaz do MariaDB (UPDATE alebo INSERT ak nechceme index posledneho vkladaneho zaznamu)
public static void SQL(string _cmd)
{
if (classUser.mainWindowState != FormWindowState.Minimized && classUser.boolComputerAsleep == false)
{
//classGlobal.wait(true);
ConnectMariaDB();
MariaDBCommand(_cmd, true);
DisConnectMariaDB();
//classGlobal.wait(false);
}
}
///
/// MariaDB poziadavka - pouzitie pri strankovani s vystupom tabulky(DataTable) bez zisťovania celkoveho poctu zaznamov
///
/// Prikaz do MariaDB
/// Zaciatocny riadok tabulky
/// Pocet riadkov na jednu stranu
/// Vratena tabulka udajov
public static void SQL(string _cmd, bool zistiPocet, Int32 _intStart, Int32 _intCount, out DataTable outDataTable)
{
if (classUser.mainWindowState != FormWindowState.Minimized && classUser.boolComputerAsleep == false)
{
//classGlobal.wait(true);
ConnectMariaDB();
MariaDBCommand(_cmd, zistiPocet);
ReturnDataTable = new DataTable();
MariaDBdataAdapter.Fill(_intStart, _intCount, ReturnDataTable);
outDataTable = ReturnDataTable;
DisConnectMariaDB();
//classGlobal.wait(false);
}
else outDataTable = null;
}
///
/// MariaDB poziadavka - pouzitie pre vystup jednej hodnoty z MariaDB vo forme byte[] (mozu to byt data obrazku alebo formulara)
///
/// Prikaz do MariaDB (prikaz by mal byt nastaveny na vystup jedinej hodnoty)
/// Vratena byte[] hodnota
public static void SQL(string _cmd, out byte[] filedata)
{
if (classUser.mainWindowState != FormWindowState.Minimized && classUser.boolComputerAsleep == false)
{
//classGlobal.wait(true);
ConnectMariaDB();
MariaDBCommand(_cmd, true);
ReturnDataTable = new DataTable();
MariaDBdataAdapter.Fill(ReturnDataTable);
if (intCelkovyPocetZazanmov != 1) filedata = null;
else filedata = (byte[])ReturnDataTable.Rows[0][0];
DisConnectMariaDB();
//classGlobal.wait(false);
}
else filedata = null;
}
}
}