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; } } }