[ tomislav91 @ 03.10.2014. 15:49 ] @
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();
        }

       

       

       
    }
}
[ dusans @ 03.10.2014. 16:10 ] @
Fale ti zarezi ovde izmedju ' '
Code:
this.comboBox2.SelectedItem + "''" + this.dtpOd.Text + "''" + this.dtpDo.Text + "') ;";
[ tomislav91 @ 03.10.2014. 16:12 ] @
hah, hvala, nisam video..

sad mi izbaci kao data missmatch of types, ali u bazi mi se cini sve ok
[ dusans @ 03.10.2014. 16:19 ] @
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.
[ tomislav91 @ 03.10.2014. 16:24 ] @
on razume date/time, znaci trebalo bi this.dtpOd.Value.ToString("Date/Time"), ali tako ne radi...

dzabe debuger, on mi kaze gde je greska, al kad ne znam da je ispravim u potpunosti
[ tomislav91 @ 03.10.2014. 16:34 ] @
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 + "') ;";
[ --ja-- @ 03.10.2014. 20:30 ] @
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.
[ tomislav91 @ 03.10.2014. 20:33 ] @
ja znam ovako, tj tako sam sa neta skontao
[ --ja-- @ 03.10.2014. 20:59 ] @
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]
[ tomislav91 @ 04.10.2014. 10:38 ] @
pa evo stavicu ja bazu, nije problem.
Code:
http://speedy.sh/mVqGn/fedek.accdb


ne mogu da otvorim jer je u novijoj verziji napravljeno, ja imam vs2010
[ --ja-- @ 04.10.2014. 11:31 ] @
Izvoliš,

prekucano u VS2010 i ažurirano da radi s tvojom bazom.

Samo naprijed!
[ tomislav91 @ 04.10.2014. 14:00 ] @
bas i ne kontam sta je tu uradjeno, ne vidim query nigde
[ --ja-- @ 04.10.2014. 14:08 ] @
Expandaj region:
[ tomislav91 @ 04.10.2014. 14:22 ] @
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...
[ --ja-- @ 04.10.2014. 15:57 ] @
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š.
[ tomislav91 @ 04.10.2014. 16:21 ] @
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]
[ --ja-- @ 04.10.2014. 19:18 ] @
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 :)
[ tomislav91 @ 04.10.2014. 19:32 ] @
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...

[ tomislav91 @ 04.10.2014. 20:52 ] @
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
[ ssi @ 10.10.2014. 12:38 ] @
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