• 19 odgovora
  • 5.833 pregleda
c# problem kod querija 03.10.2014. u 15:49 · pre 146 meseci #1
izbaci mi ovu gresku


ali 4 unosa je (2 combo boxa i 2 data pickera) za 4 kolone u tabeli.

U cemu je problem?
Evo celog koda

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Windows.Forms;

namespace zadatak2
{
    public partial class Form1 : Form
    {
        private OleDbConnection connection=new OleDbConnection();
        public Form1()
        {
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\VS2010 projects\zadatak2\zadatak2\fedek.accdb;Jet OLEDB:Database Password=fedek;";
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {

                connection.Open();
                OleDbCommand command=new OleDbCommand();
                command.Connection=connection;
                string query="select * from konf";
                command.CommandText=query;
                
                OleDbDataReader reader=command.ExecuteReader();
                while(reader.Read())
                {
                    comboBox1.Items.Add(reader["korisnik"].ToString());
                    comboBox2.Items.Add(reader["dogadjaj"].ToString());
            }
               
            }
            catch(Exception ex)
            {
                MessageBox.Show("error" + ex);
            }

            connection.Close();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            string query = "insert into Tomislav (Korisnik, Dogadjaj, DatumOd, DatumDo) values('" + this.comboBox1.SelectedItem + "','" + this.comboBox2.SelectedItem + "''" + this.dtpOd.Text + "''" + this.dtpDo.Text + "') ;";

           
          

            OleDbCommand command1 = new OleDbCommand();
            command1.Connection = connection;
            command1.CommandText = query;

            OleDbDataReader reader;


            try
            {
                connection.Open();

                reader = command1.ExecuteReader();
                MessageBox.Show("saved");
                while (reader.Read())
                {
                }

            }

            catch (Exception ex1)
            {
                MessageBox.Show("error" + ex1);
            }

            connection.Close();
        }

       

       

       
    }
}
Potpis
life is the one,take care of them!

http://hardware-software.serbianforum.info/
Re: c# problem kod querija 03.10.2014. u 16:10 · pre 146 meseci #2
Fale ti zarezi ovde izmedju ' '
Code:
this.comboBox2.SelectedItem + "''" + this.dtpOd.Text + "''" + this.dtpDo.Text + "') ;";
Re: c# problem kod querija 03.10.2014. u 16:19 · pre 146 meseci #4
Umesto
Code:

this.dtpOd.Text


Treba
Code:

this.dtpOd.Value.ToString("format koji razume access")

i verovatno ne bi trebalo da stoji u navodnicima ' '

Nauči da koristiš debugger, nema smisla da pitaš za svaku banalnu grešku dok ti ne proradi.
Re: c# problem kod querija 03.10.2014. u 16:34 · pre 146 meseci #6
resio,

Code:


string query = "insert into Tomislav (Korisnik, Dogadjaj, DatumOd, DatumDo) values('" + this.comboBox1.SelectedItem + "','" + this.comboBox2.SelectedItem + "','" + this.dtpOd.Value.Date + "','" + this.dtpDo.Value.Date + "') ;";
Potpis
life is the one,take care of them!

http://hardware-software.serbianforum.info/
Re: c# problem kod querija 03.10.2014. u 20:30 · pre 146 meseci #7
Vidim da ti nitko nije skrenuo pažnju pa ću ja, query-ji na bazu se ovako ne pišu. Savjetujem ti da što prije proučiš kako parametrizirati query-je. Nije teško, a riješiti će ti probleme koje imaš s tipovima, plus što će te zaštititi od SQL injectiona.
Potpis
http://www.dropbox.com/referrals/NTQ0MTI2NDc5
https://www.agronomija.info/
Failure is not an option. It comes bundled with your Microsoft product.
Re: c# problem kod querija 03.10.2014. u 20:59 · pre 146 meseci #9
Ako prikačiš bazu mogu ti složiti primjer kako bi se to otprilike trebalo raditi.

Edit:
Evo pošto nisam imao tvoju bazu pokušao sam ju rekonstruirati iz tvog posta. Uz poruku je prikačen solution koji bi ti trebao raditi s tvojom bazom ako sam sve dobro uradio. Uglavnom tu ti je cijeli solution pa možeš pogledati kako se parametriziraju query-ji, jer stvarno je bitno otpočetka učiti raditi s bazom na ispravan način.
Naravno, ovdje je sve nabacano na jednu formu, to se tako ne radi, ali o tom potom.

[Ovu poruku je menjao --ja-- dana 03.10.2014. u 23:16 GMT+1]
Potpis
http://www.dropbox.com/referrals/NTQ0MTI2NDc5
https://www.agronomija.info/
Failure is not an option. It comes bundled with your Microsoft product.
Re: c# problem kod querija 04.10.2014. u 14:22 · pre 146 meseci #14
ovo je malo duzi posao od onog sto sam ja uradio :) ali vidim da je lakse i bolje i sigurnije...

Ali sta recimo ako bih zeleo da random unesem u bazu podataka sa dugmetom, znaci imam data picker i da tako izaberem datum i kada kliknem na random on sam izabere iz combo boxova i unese u tabelu tomislav..
Code:

private void button1_Click(object sender, EventArgs e)
        {
            Random random = new Random();
            int newSelectedIndex = comboBox1.SelectedIndex;
            while (newSelectedIndex == comboBox1.SelectedIndex)
            {
                newSelectedIndex = random.Next(0, comboBox1.Items.Count);
            }
            comboBox1.SelectedIndex = newSelectedIndex;
        }

tako sam nekako mislio da izabere na dugme random iz jednog comboa...Ali kako sad oba i jos da impelentiram u bazu podataka...
Potpis
life is the one,take care of them!

http://hardware-software.serbianforum.info/
Re: c# problem kod querija 04.10.2014. u 15:57 · pre 146 meseci #15
Ako kucaš po onom mom kodu, onda ovako:

Code:

        private void button1_Click(object sender, EventArgs e)
        {
            Random r = new Random((int)DateTime.Now.Ticks);

            cbKorisnici.SelectedIndex = r.Next(0, cbKorisnici.Items.Count);
            cbDogadjaji.SelectedIndex = r.Next(0, cbDogadjaji.Items.Count);

            Save();
        }


Inicijalizaciju random number generatora bi trebalo baciti u konstruktor forme ali i ovako ćeš dobiti to što ti hoćeš.
Potpis
http://www.dropbox.com/referrals/NTQ0MTI2NDc5
https://www.agronomija.info/
Failure is not an option. It comes bundled with your Microsoft product.
Re: c# problem kod querija 04.10.2014. u 16:21 · pre 146 meseci #16
A moze li se napraviti da recimo napravim neki textBox i da unesem broj, npr, 3 i da 3 random unosa on ubaci sam u bazu podataka? ako ja recimo odaberem dva datuma(od-do, sa date pickera) a sam da random izabere neki datum/vreme odatle, dogadjaj i korisnika?


ja sam stavio format ovako
Code:

dtpOd.Format = DateTimePickerFormat.Custom;
dtpOd.CustomFormat = "ddddd, MMMM dd, yyyy hh:mm:ss tt"; 





Ali ne vidim u tvom kodu gde je deo koji upisuje i vreme u bazu? jer ja sam stavio format da pokazuje i vreme u datapicker, ali u mom kodu stavlja u bazu samo datum, a ne vreme.

Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Windows.Forms;

namespace zadatak2
{
    public partial class Form1 : Form
    {
        private OleDbConnection connection=new OleDbConnection();
        public Form1()
        {
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\VS2010 projects\zadatak2\zadatak2\fedek.accdb;Jet OLEDB:Database Password=fedek;";
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dtpOd.Format = DateTimePickerFormat.Custom;
            dtpOd.CustomFormat = "ddddd, MMMM dd, yyyy hh:mm:ss tt";
            dtpDo.Format = DateTimePickerFormat.Custom;
            dtpDo.CustomFormat = "ddddd, MMMM dd, yyyy hh:mm:ss tt"; 

                connection.Open();
                
                string query="SELECT korisnik from korisnici";
                string query2 = "select dogadjaj from dogadjaji";
                OleDbCommand command = new OleDbCommand(query, connection);
                command.Connection = connection;
                OleDbDataReader reader = command.ExecuteReader();

               
                
             
                while(reader.Read())
                {

                    comboBox1.Items.Add(reader["korisnik"].ToString());
                   
                    
            }
                command = new OleDbCommand(query2, connection);
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    comboBox2.Items.Add(reader["dogadjaj"].ToString());
                }
           
           

            connection.Close();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
          
            string query = "insert into Tomislav (Korisnik, Dogadjaj, DatumOd, DatumDo) values('" + this.comboBox1.SelectedItem + "','" + this.comboBox2.SelectedItem + "','" + this.dtpOd.Value.Date + "','" + this.dtpDo.Value.Date + "') ;";
           
          

            OleDbCommand command1 = new OleDbCommand();
            command1.Connection = connection;
            command1.CommandText = query;

            OleDbDataReader reader;


            try
            {
                connection.Open();

                reader = command1.ExecuteReader();
                MessageBox.Show("Saved");
                while (reader.Read())
                {
                }

            }

            catch (Exception ex1)
            {
                MessageBox.Show("error" + ex1);
            }

            connection.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            new Random((int)DateTime.Now.Ticks);  
                int staro1 = comboBox1.SelectedIndex;
                int staro2 = comboBox2.SelectedIndex;
     
                comboBox1.SelectedIndex = (new Random()).Next(comboBox1.Items.Count);
                comboBox2.SelectedIndex = (new Random()).Next(comboBox2.Items.Count);
     
                string tekstKomande = "insert into Tomislav (Korisnik, Dogadjaj, DatumOd, DatumDo) values('" + this.comboBox1.SelectedItem + "','" + this.comboBox2.SelectedItem + "','" + this.dtpOd.Value.Date + "','" + this.dtpDo.Value.Date + "') ;";
     
     
                OleDbCommand command1 = new OleDbCommand();
                command1.Connection = connection;
                command1.CommandText = tekstKomande;

                OleDbDataReader reader;


                try
                {
                    connection.Open();

                    reader = command1.ExecuteReader();
                    MessageBox.Show("saved");
                    while (reader.Read())
                    {
                    }

                }

                catch (Exception ex1)
                {
                    MessageBox.Show("error" + ex1);
                }

                connection.Close();
     
                comboBox1.SelectedIndex = staro1;
                comboBox2.SelectedIndex = staro2;
            }
        }

  

       

       

       
    }




[Ovu poruku je menjao tomislav91 dana 04.10.2014. u 20:00 GMT+1]
Potpis
life is the one,take care of them!

http://hardware-software.serbianforum.info/
Re: c# problem kod querija 04.10.2014. u 19:18 · pre 146 meseci #17
Naravno da može.
Code:

if (dtDatumOd.Value.Ticks < dtDatumDo.Value.Ticks)
{
    byte[] buffer = new byte[sizeof(long)];

    _random.NextBytes(buffer);
    long value1 = (Math.Abs(BitConverter.ToInt64(buffer, 0)) % (dtDatumDo.Value.Ticks - dtDatumOd.Value.Ticks)) + dtDatumOd.Value.Ticks;

    _random.NextBytes(buffer);
    long value2 = (Math.Abs(BitConverter.ToInt64(buffer, 0)) % (dtDatumDo.Value.Ticks - dtDatumOd.Value.Ticks)) + dtDatumOd.Value.Ticks;

    DateTime datumOd = new DateTime(Math.Min(value1, value2));
    DateTime datumDo = new DateTime(Math.Max(value1, value2));
}


Mislim da bi ti bilo bolje pronaći nekakve zadatke za početnike nego ovako napamet nabadati. Ili si zadaj neki jednostavniji zadatak u okviru onoga što znaš pa se igraj s time dok se u tome ne uhodaš. Forum služi za pitanja i sve je to ok, odgovarao sam isključivo jer sam vidio da se trudiš i pokušavaš sam nešto shvatiti, i to podržavam. Samo smatram da si krenuo od prekompliciranih stvari (pristup bazi gdje napraviš select koji vrati kartezijev produkt dviju tablica pa se čudiš zašto se vrijednosti duplaju, randomiziranje nekih datuma i slično). Probaj jednostavnije stvari, za početak nakucaj neki tekst editor ili kalkulator, to su nam valjda svima bili neki početnički primjeri, i ima hrpa tutorijala za to. Nemoj odjednom sve učiti (i c# i baze i tko zna što još), prvo radi c#, kad stekneš dojam da si njime ovladao do razine kad sam možeš riješiti ili na netu pronaći rješenje za većinu problema koje srećeš, onda tu počni učiti još nešto, npr. bazu.

Eto nadam se da sam pomogao.
Pozdrav!

Edit:
Dok sam napisao odgovor izmijenio si pitanje. Nek ostane ovo ovdje, a ostatak pokušaj sam dokučiti :)
Potpis
http://www.dropbox.com/referrals/NTQ0MTI2NDc5
https://www.agronomija.info/
Failure is not an option. It comes bundled with your Microsoft product.
Re: c# problem kod querija 04.10.2014. u 19:32 · pre 146 meseci #18
Hvala na odgovoru!

Da li ovaj kod stavljam u moje dugme? Ne znam sad da je to odgovor na? random vreme?
Ima neke greskice, ja sam to stavio u deo koda:
Code:

 private void button1_Click(object sender, EventArgs e)
        {
            int intTextBox;
            intTextBox = Convert.ToInt32(txtBroj.Text);
            intTextBox = int.Parse(txtBroj.Text);
            for (int i = 0; i < intTextBox + 1; i++)
            {
                int staro1 = comboBox1.SelectedIndex;
                int staro2 = comboBox2.SelectedIndex;

                comboBox1.SelectedIndex = (new Random()).Next(comboBox1.Items.Count);
                comboBox2.SelectedIndex = (new Random()).Next(comboBox2.Items.Count);
                if (dtpOd.Value.Ticks < dtpDo.Value.Ticks)
                {
                    byte[] buffer = new byte[sizeof(long)];

                    random.NextBytes(buffer);
                    long value1 = (Math.Abs(BitConverter.ToInt64(buffer, 0)) % (dtpDo.Value.Ticks - dtpOd.Value.Ticks)) + dtpOd.Value.Ticks;

                   random.NextBytes(buffer);
                    long value2 = (Math.Abs(BitConverter.ToInt64(buffer, 0)) % (dtpDo.Value.Ticks - dtpOd.Value.Ticks)) + dtpOd.Value.Ticks;

                    DateTime datumOd = new DateTime(Math.Min(value1, value2));
                    DateTime datumDo = new DateTime(Math.Max(value1, value2));
                }

                string tekstKomande = "insert into Tomislav (Korisnik, Dogadjaj, DatumOd, DatumDo) values('" + this.comboBox1.SelectedItem + "','" + this.comboBox2.SelectedItem + "','" + this.dtpOd.Value + "','" + this.dtpDo.Value + "') ;";

.
.
....

I ima neke greskice, da ime random ne postoji u tom kontekstu...

Potpis
life is the one,take care of them!

http://hardware-software.serbianforum.info/
Re: c# problem kod querija 04.10.2014. u 20:52 · pre 146 meseci #19
iako sam stavio u tom delu koda
Random random = new Random();
on ne uradi posao, kada stavim text box i stavim da upisuje toliko puta koliko ja unesem u text box on unese samo te datume i vreme koje sam stavio, a ne random, a hteo bih da kad odaberem raspon datuma da mi u bazi ubaci random datum i vreme
Potpis
life is the one,take care of them!

http://hardware-software.serbianforum.info/
Re: c# problem kod querija 10.10.2014. u 12:38 · pre 146 meseci #20
Citat:
tomislav91:
resio,

Code:


string query = "insert into Tomislav (Korisnik, Dogadjaj, DatumOd, DatumDo) values('" + this.comboBox1.SelectedItem + "','" + this.comboBox2.SelectedItem + "','" + this.dtpOd.Value.Date + "','" + this.dtpDo.Value.Date + "') ;";



Vidi, nemoj to da radis.

1) SQL injection je ozbiljan propust

2) Ruzno izgleda

3) Sta ce se desiti kada imas recimo:

Korisnik, Dogadjaj, DatumOd, DatumDo, Potpisao, PotpisaoDatum, Odobrio, OdobrioDatum, Proneverio, ProneverioDatum, Prgledao, PregledaoDatum itd... ?

Ko ce to debug-ovati ako se pojavi greska, promene ime polja ili nesto slicno ? I cime ? I koliko ce zivaca potrositi na to ?

Sta ako to budes bas ti :) posle dve godine :)

4) Top 25 Most Dangerous Programming Mistakes
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme