示例#1
0
        private void Form_SEARCH_Load(object sender, EventArgs e)
        {
            NpgsqlConnection connection = new NpgsqlConnection();//stvaram "prazan" objekt

            try
            {
                string connectionstring;
                Form2.GetConnection(out connection, out connectionstring);
                string sql = "SELECT rijec from rijeci";

                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, connectionstring); //PRICA S BAZOM

                ds.Reset();                                                          // data set ono sta vrati baza, tj pomocu da to spremimo u ds (mozemo imat i vise tablica za vratit (union)
                da.Fill(ds);                                                         //data adapter napuni data set
                dt = ds.Tables[0];                                                   //u dt spremimo jednu od tablica koja je vracena koja nam treba

                List <string> s = new List <string>();

                //foreach(string zapis in s)
                //{
                //    //uzima varijablu iz s i stavlja je u zapis...... i radimo s njom sta radimo
                //}

                foreach (DataRow row in dt.Rows) //
                {
                    s.Add(row.ItemArray.FirstOrDefault().ToString());
                }


                var source = new AutoCompleteStringCollection();
                source.AddRange(s.ToArray()); // dodaje u source kolekciju stringova;
                //da ne moram pisat 74 puta source.ADD(s.ToArray[0])...
                //ToArray da mi bude niz
                textBox1.AutoCompleteCustomSource = source;                          //pridruzila mu source
                textBox1.AutoCompleteMode         = AutoCompleteMode.SuggestAppend;  //stavili mu da mu je mod predlozi kraj
                textBox1.AutoCompleteSource       = AutoCompleteSource.CustomSource; //da koristi customsource koji smo mi napravili; po nasoj mjeri

                textBox_SQLQUERY.Enabled = false;                                    //da je samo read only
            }
            catch (Exception k)
            {
                k.StackTrace.ToString(); //pokazivat ce tocno di je greska i ispisat koja je, opis greske
            }

            finally
            {
                connection.Close();
            }
        }
示例#2
0
        private void button1_Click(object sender, EventArgs e)
        {
            NpgsqlConnection connection = new NpgsqlConnection();//stvaram "prazan" objekt

            try
            {
                string connectionstring;
                Form2.GetConnection(out connection, out connectionstring);
                string sql1 = "select MAX(movieid) from movie";

                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql1, connectionstring); //PRICA S BAZOM


                ds.Reset();  // data set ono sta vrati baza
                da.Fill(ds); //data adapter napuni data set; a data table je jedna od tih
                dt = ds.Tables[0];
                int newId = (int)dt.Rows[0].ItemArray[0];
                newId++;


                string sql2 = "   INSERT INTO movie(movieid,title,categories,summary,description)" +
                              "                  values (" + newId + "," + "'" + titlebox.Text + "'" + "," + "'" + categoriesbox.Text + "'" + "," + "'" + summarybox.Text + "'" +
                              "," + "'" + descriptionbox.Text + "'" + ")   ";

                da = new NpgsqlDataAdapter(sql2, connectionstring);

                ds.Reset();
                da.Fill(ds);

                //dt = ds.Tables[0];
            }
            catch (Exception k)
            {
                k.StackTrace.ToString(); //pokazivat ce tocno di je greska i ispisat koja je, opis greske
            }

            finally
            {
                connection.Close();
                MessageBox.Show("Uspjesno dodan film :) ");
                titlebox.ResetText();
                categoriesbox.ResetText();
                summarybox.ResetText();
                descriptionbox.ResetText();
            }
        }
示例#3
0
        private void button_search_Click(object sender, EventArgs e)
        {
            if (radiobuttonAND.Checked)
            {
                operacija = " & ";
            }

            else if (radiobuttonOR.Checked)
            {
                operacija = " | ";
            }

            else
            {
                operacija = "";
            }

            /// konecija na bazu
            ///
            NpgsqlConnection connection = new NpgsqlConnection();

            // prirema query stringa za sql pretragu

            string priprema = textBox1.Text;                 //povuc cu sa inputa sta je upisano

            Regex RegexZaUzorak  = new Regex("\\\".+?\\\""); // . zamjenjuje bilo koji znak, + jedan ili vise puta taj znak, a ? uzmi najmanje sto mozes
            Regex RegexZaUzorak2 = new Regex("\\\"");        // \\ escepea jedan \, a \" escepa navodni znak, tj trazim \"
            //  Regex RegexZaUzorak3 = new Regex("\\(.+?\\)"); // moramo ovako dodat \ jer mi () znaci grupiranje u regularnim izrazima; zapravo radi isto sta i regex1 samo gleda ( umjesto "


            MatchCollection matches = RegexZaUzorak2.Matches(priprema); //pokusava naci podudaranje zadanog uzorka u zadanom stringu po \navodnim znakovima

            var a = RegexZaUzorak.Split(priprema);                      //sprema niz svih koji nisu uzorak

            foreach (string q in a)                                     //u pripremi trazimo a i ako ga najdejmo, a on nije prazno mjesto ili " " makni ga iz pripreme da ostanu samo fraze
            {
                if (!String.IsNullOrWhiteSpace(q) && !String.IsNullOrEmpty(q))
                {
                    priprema = priprema.Remove(priprema.IndexOf(q), q.Length); //u pripremi mi je uzorak, tj ono s " "
                }
            }

            for (int i = 0, k = matches.Count / 2; i < k; ++i)       //minjamo navodne znake sa odgovarajucim zagradama jer takva je sintaksa za postgre bazu
            {
                priprema = RegexZaUzorak2.Replace(priprema, "(", 1); //1 jer ce samo prvo pojabvljivanje zamijenit
                priprema = RegexZaUzorak2.Replace(priprema, ")", 1);
            }

            // u a smo dobili samo normalne
            //u priprema smo dobili fraze


            string[] pripremapolje = priprema.Split(')');       //splitanje fraze po zagradama

            List <string> lista       = pripremapolje.ToList(); //privremena lista
            List <string> nonullLista = new List <string>();    //lista fraza sa pripadajucim zagradama; morali stvorit novu jer ne mozemo po listi hodat i mijenjat podatke

            lista.ForEach(item => {
                if (!String.IsNullOrEmpty(item) && !String.IsNullOrWhiteSpace(item))
                {
                    nonullLista.Add(item + ")"); //spremit samo ne nul podatke jer smo ih gore imali i dodat )
                }
            });

            lista = a.ToList();

            List <string> nonNull2 = new List <string>();

            lista.ForEach(item => {
                if (!String.IsNullOrEmpty(item) && !String.IsNullOrWhiteSpace(item))
                {
                    nonNull2.Add(item); //isto za ne nul podatke i za ne-fraze
                }
            });

            string toRet2 = "";

            toRet2 += String.Join(operacija, nonNull2.ToArray()); //spajanje ne-fraze s operatorom


            string toRet = "";

            nonullLista.ForEach(item => toRet += String.Join(" & ", item.Split(' '))); //spajanje fraze s
            int           o  = 0;
            int           z  = 0;
            StringBuilder sb = new StringBuilder(); //stvara stringove od charactera

            foreach (char c in toRet)
            {
                if (c == '(')
                {
                    ++o;
                }
                if (c == ')')
                {
                    ++z;
                }
                if (c == '&' && (o == z))
                {
                    sb.Append(operacija);
                    continue;
                }

                sb.Append(c);
            }
            toRet = sb.ToString();

            //string[] pripremapolje = priprema.Split(' '); //razdvojit po razmacima, ali paziti ako imam frazu (prvo po regexima pa onda splita
            priprema = String.Join(operacija, pripremapolje);//doslovno izmedu svakog u polju ubacuje operator

            toRet2 = toRet2 + operacija + toRet;

            try
            {
                string connectionstring;
                Form2.GetConnection(out connection, out connectionstring);
                string sql = String.Format("SELECT m.movieid, m.title," +
                                           " ts_headline(m.title, to_tsquery('english', '{0}')) AS \"PODEBLJANI NASLOV\"," +
                                           " ts_headline(m.description, to_tsquery('english', '{0}')) AS \"PODEBLJANI DESCRIPTION\", " +
                                           "m.description, " +
                                           "ts_rank(m.sumtsvector, to_tsquery('english', '{0}'), 1) AS \"RANG\"" +
                                           "\r\nFROM movie AS m\r\n" +
                                           "WHERE (m.sumtsvector @@ to_tsquery('{0}')) = TRUE\r\n" +
                                           "ORDER BY \"RANG\" DESC", toRet2);

                //'{0}' ko %d, a da imamo vise parametara onda povecavam broj

                textBox_SQLQUERY.Text = sql;

                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, connectionstring); //PRICA S BAZOM

                ds.Reset();                                                          // data set ono sta vrati baza, tj pomocu da to spremimo u ds (mozemo imat i vise tablica za vratit (union)
                da.Fill(ds);                                                         //data adapter napuni data set
                dt = ds.Tables[0];                                                   //u dt spremimo jednu od tablica koja je vracena koja nam treba

                dataGridView_documentsRang.DataSource = dt;                          //.DataSource je izvor podataka za taj je u dt
                dataGridView_documentsRang.Columns["movieid"].Visible     = false;
                dataGridView_documentsRang.Columns["description"].Visible = false;

                label_count.Text = dt.Rows.Count.ToString();

                //za insert u queryhstory
                string sql2 = string.Format("INSERT INTO queryhistory(unos_korisnika,vrijeme_unosa)" +
                                            "                       VALUES ('{0}' , '{1}')", toRet2, DateTime.Now.ToString("dd-MM-yyyy hh:mm:ss"));

                da = new NpgsqlDataAdapter(sql2, connectionstring); //PRICA S BAZOM

                ds2.Reset();                                        // treba nam drui jer ako resetam prvi izgubit cu podatke koji su se prikazali
                da.Fill(ds2);                                       //data adapter napuni data set
            }
            catch (Exception k)
            {
                k.StackTrace.ToString(); //pokazivat ce tocno di je greska i ispisat koja je, opis greske
            }

            finally
            {
                connection.Close();
            }
        }
示例#4
0
        private void buttonANALIZIRAJ_Click(object sender, EventArgs e)
        {
            string upit    = "";
            string podupit = "";

            string upit2    = "";
            string podupit2 = "";



            //Regex ZamjeniTocku = new Regex(@"\."); //tocka oznavama bilo koji znak, ne treba jer cemo Replace

            if (dateTimePickerDAYSTART.Value < dateTimePickerDAYFINISH.Value)
            {
                if (radioButtonPODANIMA.Checked)
                {
                    poDanimaSTART  = dateTimePickerDAYSTART.Text;
                    poDanimaFINISH = dateTimePickerDAYFINISH.Text;

                    poDanimaFINISH = poDanimaFINISH.Replace('.', '-'); //zamjena . sa -
                    poDanimaSTART  = poDanimaSTART.Replace('.', '-');

                    poDanimaFINISH = poDanimaFINISH.Remove(poDanimaFINISH.Length - 1);//maknit zadnju -
                    poDanimaSTART  = poDanimaSTART.Remove(poDanimaSTART.Length - 1);

                    NpgsqlConnection connection = new NpgsqlConnection();//stvaram "prazan" objekt

                    //moram CASTAT vrijeme unosa zato sto vrijeme_unosa je date time, a nas zanima samo date
                    //radimo string koji saljemo u bazu:
                    //gdje datum odgovara nekom periodu i grupiram po tome koji je zahrjev i po datumu
                    // PIVOTINANJE: biramo sta zelimo da bude redak, a sta da bude stupac
                    // grupiranje podataka po vise kriterija, tj sazeti prikaz podataka
                    //za pivotiranje moramo mapravit sljedeci podupit:
                    try
                    {
                        string connectionstring;
                        Form2.GetConnection(out connection, out connectionstring);

                        podupit = @"SELECT unos_korisnika, 
                        CAST(""vrijeme_unosa"" AS date) AS vrijeme, 
	                    CAST(COUNT(*) AS integer) AS broj_unosa
                        FROM queryhistory
                        WHERE CAST(""vrijeme_unosa"" AS DATE) BETWEEN '" + poDanimaSTART + "' AND '" + poDanimaFINISH + @"'
                        GROUP BY unos_korisnika, vrijeme
                        ORDER BY Unos_korisnika, vrijeme";

                        // json_object_agg definirat: stupce u pivotiranju; on ce uzet datume i koliko ih ima i
                        upit = @"SELECT unos_korisnika,
                        json_object_agg(vrijeme, broj_unosa ORDER BY vrijeme) AS datumi
                        FROM (" + podupit + @") podupiit
                        GROUP BY unos_korisnika
                        ORDER BY unos_korisnika";

                        //@ moram koristit da mi npr za \n ne stavlja novi red nego bas uzme \n

                        NpgsqlDataAdapter da = new NpgsqlDataAdapter(upit, connectionstring); //PRICA S BAZOM

                        ds.Reset();                                                           // data set ono sta vrati baza
                        analizaGrid.DataSource          = null;                               //resetirat data source za svaki slucaj
                        analizaGrid.AutoGenerateColumns = true;                               //ne zelimo da sam generira stupce nego cemo ih mi postavit
                        //foreach(in ds.Tables[0])

                        da.Fill(ds); //data adapter napuni data set; a data table je jedna od tih
                        dt = ds.Tables[0];
                        //    dt.Columns[1].
                        analizaGrid.DataSource = dt;
                    }
                    catch (Exception k)
                    {
                        k.StackTrace.ToString(); //pokazivat ce tocno di je greska i ispisat koja je, opis greske
                    }

                    finally
                    {
                        connection.Close();
                    }
                }

                else if (radioButtonPOSATIMA.Checked)
                {
                    poDanimaSTART  = dateTimePickerDAYSTART.Text;
                    poDanimaFINISH = dateTimePickerDAYFINISH.Text;

                    poDanimaFINISH = poDanimaFINISH.Replace('.', '-'); //zamjena . sa -
                    poDanimaSTART  = poDanimaSTART.Replace('.', '-');

                    poDanimaFINISH = poDanimaFINISH.Remove(poDanimaFINISH.Length - 1);//maknit zadnju -
                    poDanimaSTART  = poDanimaSTART.Remove(poDanimaSTART.Length - 1);

                    NpgsqlConnection connection = new NpgsqlConnection();//stvaram "prazan" objekt

                    //moram CASTAT vrijeme unosa zato sto vrijeme_unosa je date time, a nas zanima samo date
                    //radimo string koji saljemo u bazu:
                    //gdje datum odgovara nekom periodu i grupiram po tome koji je zahrjev i po datumu
                    // PIVOTINANJE: biramo sta zelimo da bude redak, a sta da bude stupac
                    // grupiranje podataka po vise kriterija, tj sazeti prikaz podataka
                    //za pivotiranje moramo mapravit sljedeci podupit:
                    try
                    {
                        string connectionstring;
                        Form2.GetConnection(out connection, out connectionstring);

                        podupit2 = @"select unos_korisnika, 
                        EXTRACT(HOUR FROM ""vrijeme_unosa"") AS vrijeme,
                        CAST(COUNT(*) AS integer) AS broj_unosa
                        FROM queryhistory
                        WHERE CAST(""vrijeme_unosa"" AS DATE) BETWEEN '" + poDanimaSTART + "' AND '" + poDanimaFINISH + @"'
                        GROUP BY unos_korisnika, vrijeme
                        ORDER BY unos_korisnika, vrijeme";

                        // json_object_agg definirat: stupce u pivotiranju; on ce uzet datume i koliko ih ima i
                        upit2 = @"SELECT unos_korisnika,
                        json_object_agg(vrijeme, broj_unosa ORDER BY vrijeme) AS datumi
                        FROM (" + podupit2 + @") podupit2
                        GROUP BY unos_korisnika
                        ORDER BY unos_korisnika";

                        //@ moram koristit da mi npr za \n ne stavlja novi red nego bas uzme \n

                        NpgsqlDataAdapter da = new NpgsqlDataAdapter(upit, connectionstring); //PRICA S BAZOM

                        ds.Reset();                                                           // data set ono sta vrati baza
                        da.Fill(ds);                                                          //data adapter napuni data set; a data table je jedna od tih
                        dt = ds.Tables[0];
                        analizaGrid.DataSource = dt;
                    }
                    catch (Exception k)
                    {
                        k.StackTrace.ToString(); //pokazivat ce tocno di je greska i ispisat koja je, opis greske
                    }

                    finally
                    {
                        connection.Close();
                    }
                }
            }

            else
            {
                MessageBox.Show("ERROR! Datum neispravan!");
            }
        }