using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Odbc; using System.Data; using System.Windows.Forms; using MySql.Data.MySqlClient; using System.IO; using System.Net.Sockets; using System.Net; namespace Mip { class classSQL { private static OdbcConnection Connection; //kanál pre connectovanie databazy private static OdbcCommand Command; //vygenerovaný príkaz pre SQL, ktorý bude odoslaný - toto nie je text. private static OdbcDataAdapter Adapter;// sem pridu data z SQL - len pamäťové miesto, v podobe tabulky public static DataTable dTable; //datable //Deklaracia premennych pre pristup k mySQL cez MYSQL private static MySqlConnection MyConnection; private static MySqlCommand MyCommand; public static MySqlDataReader myData; ///////////////////////////////////////////////////////////////////// /// /// Pripojí classSQL.Conection k SQL serveru cez ODBC driver /// public static void connectSQL () { // MessageBox.Show(IPGroup()); string ServerIP = "192.168."+IPGroup()+".39"; TcpClient tcpClient = new TcpClient(); try { tcpClient.Connect(ServerIP, 3306); } catch (Exception) { MessageBox.Show("MariaDB server nie je v lokálnej sieti dostupný!" + Environment.NewLine + Environment.NewLine + "Po stačení tlačidla OK, sa program skúsi pripojiť cez internet! "); ServerIP = "87.197.164.107"; try { tcpClient.Connect(ServerIP, 3306); } catch (Exception) { MessageBox.Show("MariaDB server nie je dostupný cez internet!" + Environment.NewLine + Environment.NewLine + "Program Mip bude ukončený! "); Environment.Exit(0); } } classSQL.Connection = new OdbcConnection("Driver={MySQL ODBC 5.1 Driver};Server=" + ServerIP + ";Database=mip; User=mip;Password=mip@2013;Option=3;");// // MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;"); } /// /// Vykoná SQL dotaz cez ODBC a výsledok uloží do ľubovolnej DataTable /// /// Znenie dotazu /// Konštanta napr. 1 - slúži na rozlíšenie medzi parametrickou a neparametrickou commandSQL public static DataTable commandSQL(string _cmd, int c) { OdbcCommand _Commanda; //vygenerovaný príkaz pre SQL, ktorý bude odoslaný - toto nie je text. OdbcDataAdapter _Adaptera;// sem pridu data z SQL - len pamäťové miesto, v podobe tabulky DataTable _dTablea; //datable connectSQL(); classSQL.Connection.Open(); _Commanda = new OdbcCommand(_cmd, Connection); //Textový príkaz prelozime do reci SQL stroja _Adaptera = new OdbcDataAdapter(_Commanda ); //Vytvoríme dátový adaptér(ukazovatel v RAMke), kam prídu výsledky z SQL _dTablea = new DataTable(); //Vytvoríme dátovú (prázdnu) tabulku, pomocou ktorej budeme pristupovať k dátam v adaptéri. _Adaptera.Fill(_dTablea); classSQL.Connection.Close(); return _dTablea; } /// /// Vykoná SQL dotaz cez ODBC a výsledok uloží do ľubovolnej DataTable /// /// Znenie dotazu public static void commandSQL(string cmd) { connectSQL(); classSQL.Connection.Open(); Command = new OdbcCommand(cmd, Connection); //Textový príkaz prelozime do reci SQL stroja Adapter = new OdbcDataAdapter(Command); //Vytvoríme dátový adaptér(ukazovatel v RAMke), kam prídu výsledky z SQL dTable = new DataTable(); //Vytvoríme dátovú (prázdnu) tabulku, pomocou ktorej budeme pristupovať k dátam v adaptéri. Adapter.Fill(classSQL.dTable); classSQL.Connection.Close(); } /// /// 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 = "192.168." + IPGroup() + ".39"; 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) public static void SaveVykresToSQL(int _IDVyrobok,int _IndexVykresu, byte [] _VykresData) { string ServerIP = "192.168." + IPGroup() + ".39"; MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;"); //INSERT INTO `mip`.`tabvykres` (`NazovVyrobku`, `RozmerTvar`, `Rozmer1`, `Rozmer2`, `Rozmer3`, `SpojeneRozmery`, `Zakaznik`, `InyNazov`, `RozlisZnakKonecnaOp`, `Alias`) VALUES ('" 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(); //long id = MyCommand.LastInsertedId; 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 = "192.168." + IPGroup() + ".39"; 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])); FileStream fs; fs = new FileStream(_filepath, FileMode.CreateNew, FileAccess.Write); fs.Write(FilewData, 0, FilewData.Length); MyConnection.Close(); fs.Close(); } /// /// 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 = "192.168." + IPGroup() + ".39"; MyConnection = new MySqlConnection("server=" + ServerIP + ";database=mip; User=mip;Password=mip@2013;;"); //INSERT INTO `mip`.`tabvykres` (`NazovVyrobku`, `RozmerTvar`, `Rozmer1`, `Rozmer2`, `Rozmer3`, `SpojeneRozmery`, `Zakaznik`, `InyNazov`, `RozlisZnakKonecnaOp`, `Alias`) VALUES ('" String poznamka = Microsoft.VisualBasic.Interaction.InputBox(null, "Zadaj poznámku k formuláru:"); //choice = Integer.parseInt(poznamka); //choice--; 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; // stara verzia /* public static System.Drawing.Image VykresZSQLDoPictureBox(int _IDVykresu) { PictureBox _pictureBox = new PictureBox(); string CmdString = ("SELECT `VykresData` FROM `tabvykres` WHERE `IDVykres` = " + _IDVykresu.ToString() + ";"); DataTable frmdatatable; frmdatatable = classSQL.commandSQL(CmdString, 1); DataRow dtrw = frmdatatable.Rows[0]; MemoryStream ms = new MemoryStream((byte[])dtrw["VykresData"]); System.Drawing.Image img; img = System.Drawing.Image.FromStream(ms); return img; } */ } // 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; //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); } 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) { MessageBox.Show("Chyba pripojenia na server: " + ex.Message); } } private void FindIP() { } private static void DisConnectMariaDB() { MariaDBConnection.Close(); } private static void MariaDBCommand(string Command) { try { DataTable celkovypocet = new DataTable(); MariaDBdataAdapter = new MySqlDataAdapter(Command, MariaDBConnection); MariaDBCommandBuilder = new MySqlCommandBuilder(MariaDBdataAdapter); 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) { ConnectMariaDB(); MariaDBCommand(_cmd); ReturnDataTable = new DataTable(); MariaDBdataAdapter.Fill(ReturnDataTable); outDataTable = ReturnDataTable; DisConnectMariaDB(); } 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) { ConnectMariaDB(); MariaDBCommand(_cmd); ReturnDataTable = new DataTable(); MariaDBdataAdapter.Fill(_intStart, _intCount, ReturnDataTable); outDataTable = ReturnDataTable; DisConnectMariaDB(); } 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) { ConnectMariaDB(); MariaDBCommand(_cmd); object Index = MySqlHelper.ExecuteScalar(MariaDBConnection, "SELECT LAST_INSERT_ID();"); if (Index != null) MariaDBLastIndex = Convert.ToInt32(Index); else MariaDBLastIndex = 0; outLastIndex = MariaDBLastIndex; DisConnectMariaDB(); } 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) { ConnectMariaDB(); MariaDBCommand(_cmd); ReturnDataTable = new DataTable(); MariaDBdataAdapter.Fill(ReturnDataTable); if (intCelkovyPocetZazanmov != 1) outString = ""; else outString = ReturnDataTable.Rows[0][0].ToString(); DisConnectMariaDB(); } 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) { ConnectMariaDB(); MariaDBCommand(_cmd); DisConnectMariaDB(); } } } } namespace System { public class classSQL { /// /// sem pridu data z SQL - len pamäťové miesto, v podobe tabulky /// private static OdbcDataAdapter Adapter; /// /// vygenerovaný príkaz pre SQL, ktorý bude odoslaný - toto nie je text. /// private static OdbcCommand Command; /// /// kanál pre connectovanie databazy /// private static OdbcConnection Connection; /// /// datable /// public static DataTable dTable; public static Int32 intCelkovyPocetZazanmov = 0; public static Int32 intPocetNaStranu = 0; private static MySqlCommandBuilder MariaDBCommandBuilder; /// /// pripojenie cez mysqldata.dll /// private static MySqlConnection MariaDBConnection; private static MySqlDataAdapter MariaDBdataAdapter; private static Int32 MariaDBLastIndex = 0; private static MySqlCommand MyCommand; /// /// Deklaracia premennych pre pristup k mySQL cez MYSQL /// private static MySqlConnection MyConnection; public static MySqlDataReader myData; private static DataTable ReturnDataTable; public classSQL(){ } ~classSQL(){ } public virtual void Dispose(){ } /// /// Vykoná SQL dotaz cez ODBC a výsledok uloží do ľubovolnej DataTable /// /// Znenie dotazu /// /// Konštanta napr. 1 - slúži na rozlíšenie medzi parametrickou a /// neparametrickou commandSQL public static DataTable commandSQL(string _cmd, int c){ return null; } /// /// Vykoná SQL dotaz cez ODBC a výsledok uloží do ľubovolnej DataTable /// /// Znenie dotazu public static void commandSQL(string cmd){ } private static void ConnectMariaDB(){ } /// /// Pripojí classSQL.Conection k SQL serveru cez ODBC driver /// public static void connectSQL(){ } private static void DisConnectMariaDB(){ } /// /// 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){ } /// /// Export výkresu z SQL na HDD /// /// Index výkresu z daného výrobku (výrobok môže /// obsahovať viacero výkresov) /// ID výrobku /// /// Path\Názov súboru, do ktorého je výkres /// vyexportovaný public static void ExportVykresToHDD(int _IDVyrobok, int _indexVykresu, string _filepath){ } private void FindIP(){ } /// /// Funkcia zistí cíšlo skupiny zo sieťovej adresy 192.168.???.1 /// private static string IPGroup(){ return ""; } private static IPAddress LocalIPAddress(){ return null; } /// /// private static void MariaDBCommand(string Command){ } /// /// Uloženie formulára z RAM do SQL /// /// Názov formulára /// pole byte[], v ktorom je uložený public static void SaveFormToSQL(string _meno, byte[] _FormularData){ } /// /// 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) /// public static void SaveVykresToSQL(int _IDVyrobok, int _IndexVykresu, byte [] _VykresData){ } /// /// MariaDB poziadavka - s vystupom celej tabulky(DataTable) /// /// Prikaz do MariaDB /// Vratena tabulka udajov public static void SQL(string _cmd, out DataTable outDataTable){ } /// /// 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){ } /// /// 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){ } /// /// 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){ } /// /// 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){ } /// /// Načítanie výkresu z SQL do pictureBoxu pictureBox=VykresZSQLDoPictureBox(int /// _IDVykresu); /// /// ID výrobku /// public static System.Drawing.Image VykresZSQLDoPictureBox(int _IDVykresu){ return null; } } }