C# combobox

CigerŠraf

Početnik
Poruka
32
Neki broj sam učitao iz Access-ove baze, smestio ga u combobox i sad treba taj broj da upišem u bazu, a da bih ga upisao u bazu, on mora biti tipa int. Kako broj iz combobox-a da pretvorim u integer? :think:

Hvala unapred. :worth:
 
Stvarno ne mogu ništa o tome da pronadjem, da li broj iz combobox-a uopšte može da se pretvori u tip int? :( Sve sam živo pretražio, nigde ne mogu da nadjem to što mi treba. :/ Da sam negde pronašao, ne bih pitao ljude po forumu.
 
The name "insert" does not exist in the current contest. o.O

Ne kontam, čemu uopšte služi ta programska linija sa "insert", a kad probam bez toga, neće, mada sam to već pokušavao ranije. :(

Ma ne treba ti insert(), dao sam za primer samo kako bi ga prosledio u metodu, taj broj, pa preko metode insert ubacio u bazu.

Mora da radi ako ti je u bazi int, mozda ti je varchar?
 
Konkretno, imam relacionu bazu podataka delova za automobile, tabelu PROIZVODJACA u kojoj se nalazi IME PROIZVODJACA i ID PROIZVODJACA i tabelu DELOVI u kojoj se nalazi ID PROIZVODJACA, MODEL, TIP... Kad unosim nove delove u bazu, prvo unesem IME PROIZVODJACA u tabelu PROIZVODJACI, onda sam ja zamislio da odatle iščitam ID PROIZVODJACA koji sam tek uneo, pa njega upišem u tabelu DELOVI, da bih mogao da unesem neki novi deo.

ID PROIZVODJACA iz tabele PROIZVODJACI iščitavam i smeštam u jedan combobox "proid" ovako:

adapter.SelectCommand = new OleDbCommand("Select * from proizvodjaci where Proizvodjac = '"+protext.Text+"' ", konekcija);
set.Clear();
adapter.Fill(set);

proid.DataSource = set.Tables[0];
proid.DisplayMember = "id proizvodjaca";


gde mi je protext textbox koji mi služi za unošenje imena novog proizvodjaca.

onda to pretvaram u int ovako:

int proidint;
proidint = Convert.ToInt32(proid.SelectedItem);


i onda to pokušam da unesem u tabelu delovi na sledeći način:

adapter1.InsertCommand = new OleDbCommand("insert into delovi (Proizvodjac, Model, Tip) values ("+proidint+", "+model.text+" , '"+tip.Text+"')",konekcija);

konekcija.open();
adapter1.InsertCommand.ExecuteNonQuery();


Gde sam pogrešio? Može li to uopšte na taj način da se uradi?
 
Konkretno, imam relacionu bazu podataka delova za automobile, tabelu PROIZVODJACA u kojoj se nalazi IME PROIZVODJACA i ID PROIZVODJACA i tabelu DELOVI u kojoj se nalazi ID PROIZVODJACA, MODEL, TIP... Kad unosim nove delove u bazu, prvo unesem IME PROIZVODJACA u tabelu PROIZVODJACI, onda sam ja zamislio da odatle iščitam ID PROIZVODJACA koji sam tek uneo, pa njega upišem u tabelu DELOVI, da bih mogao da unesem neki novi deo.

ID PROIZVODJACA iz tabele PROIZVODJACI iščitavam i smeštam u jedan combobox "proid" ovako:

adapter.SelectCommand = new OleDbCommand("Select * from proizvodjaci where Proizvodjac = '"+protext.Text+"' ", konekcija);
set.Clear();
adapter.Fill(set);

proid.DataSource = set.Tables[0];
proid.DisplayMember = "id proizvodjaca";


gde mi je protext textbox koji mi služi za unošenje imena novog proizvodjaca.

onda to pretvaram u int ovako:

int proidint;
proidint = Convert.ToInt32(proid.SelectedItem);


i onda to pokušam da unesem u tabelu delovi na sledeći način:

adapter1.InsertCommand = new OleDbCommand("insert into delovi (Proizvodjac, Model, Tip) values ("+proidint+", "+model.text+" , '"+tip.Text+"')",konekcija);

konekcija.open();
adapter1.InsertCommand.ExecuteNonQuery();


Gde sam pogrešio? Može li to uopšte na taj način da se uradi?

Kolona Proizvodjac u bazi kog je tipa? Number/int?
Vidim gore koristis kolonu proizvodjac kao string/text/varchar,
Select * from proizvodjaci where Proizvodjac = '"+protext.Text+"
a dole kao int.
insert into delovi (Proizvodjac, Model, Tip) values ("+proidint+", "+model.text+" , '"+tip.Text+"')


Ako su kolone Proizvodjac iz tabele proizvodjaci i Proizvodjac iz tabele delovi povezani, to nece raditi, jer su obe string, pa tako i vrednost mora biti u nizu karaktera...
 
Kolona Proizvodjac u tabeli Proizvodjaci je tipa text, dok je kolona Proizvodjac u tabeli delovi tipa number i povezana je relacijom sa ID PROIZVODJACA iz tabele Proizvodjaci. Možda sam tu napravio grešku? Ne treba da pravim relacije?
 
Kolona Proizvodjac u tabeli Proizvodjaci je tipa text, dok je kolona Proizvodjac u tabeli delovi tipa number i povezana je relacijom sa ID PROIZVODJACA iz tabele Proizvodjaci. Možda sam tu napravio grešku? Ne treba da pravim relacije?

Aha, kolona proizvodjac u tabeli delovi je povezana sa kolonom ID proizvodjaca u tabeli proizvodjaci. Dobro.
Ako su istog tipa, tu onda greske nema.

Iz tabele Proizvodjaci izvlacis ID i smestas u kombo da bi smestio selektovani id u tabelu Delovi.
Sta ti daje kao gresku?
 
Ne znam više ni ja šta mi je izbacivalo kao grešku. xD Sve sam živo pokušai o ne ide. :D
Patio sam se od juče od podne i sad sam rešio da elegantno izbegnem taj deo programa, tako što ću izbaciti relacije. :D Tako sam i uspeo da odradim. :D Nadam se da mi to neće dalje kvariti posao. :D

- - - - - - - - - -

U svakom slučaju, do neba ti hvala. :) :heart:
 
Za početak,

u naslovu teme je naveden C#, a u primjeru u postu br.8 je VB.NET. Ipak, to nije toliko bitno koliko je bitna dobra praksa.

Kada je u pitanju tabela proizvođači u bazi, najlakši način za njeno kreiranje je slijedeći:

proizvodjacID (int), primary key, not null
proizvodjacNaziv (nvarchar)

Te dvije kolone su sasvim dovoljne da opišeš proizvođača.

Sad, ukoliko si unio nekoliko proizvođača u tu tabelu i želiš da ih prikažeš u ComboBox kontroli, onda trebaš postupiti ovako:

Kod:
 Dim connection As New SqlConnection(connectionString)
        Try


            connection.Open()

            Dim sqlQuery As String = "SELECT proizvodjacID,proizvodjacNaziv FROM proizvodjaci"

            Dim myCommand As New SqlCommand(sqlQuery, connection)
            Dim proizvodjacTabela As New DataTable
            Dim proizvodjacAdapter As New SqlDataAdapter

            proizvodjacAdapter .SelectCommand = myCommand
            proizvodjacAdapter .Fill(proizvodjacTabela )

            myCommand.Dispose()
            proizvodjacAdapter .Dispose()


            cmbProizvodjaci.DataSource = proizvodjacTabela 
            cmbProizvodjaci.DisplayMember = "proizvodjacNaziv "
            cmbProizvodjaci.ValueMember = "proizvodjacID"
            cmbProizvodjaci.AutoCompleteMode = AutoCompleteMode.SuggestAppend


        Catch ex As Exception
            connection.Close()
            MessageBox.Show("Desila se neka greška")
        Finally
            connection.Close()

        End Try

U primjeru iznad možeš vidjeti kako na jednostavan način možeš svoju ComboBox kontrolu napuniti podacima iz tabele Proizvodjaci.

Još jedna stvar koju sam primjetio je tvoje korištenje upita. Pokušaj da ti pređe u naviku korištenje parametrizovanih upita. Mnogo ih je lakše razumjeti, izbjegneš mnoštvo problema i kod razvoja web aplikacija se štitiš od SQL Injection napada.

Primjer ispod:

Kod:
 Dim connection As New SqlConnection(connectionString)
        Try


            connection.Open()

            Dim sqlQuery As String = "SELECT proizvodjacID,proizvodjacNaziv FROM proizvodjaci WHERE proizvodjacID=@proizvodjacID"

            Dim myCommand As New SqlCommand(sqlQuery, connection)

            myCommand.Parameters.AddWithValue("@proizvodjacID", Cint(cmbProizvodjaci.SelectedValue))

            Dim proizvodjacTabela As New DataTable
            Dim proizvodjacAdapter As New SqlDataAdapter

            proizvodjacAdapter .SelectCommand = myCommand
            proizvodjacAdapter .Fill(proizvodjacTabela )

            myCommand.Dispose()
            proizvodjacAdapter .Dispose()


            cmbProizvodjaci.DataSource = proizvodjacTabela 
            cmbProizvodjaci.DisplayMember = "proizvodjacNaziv "
            cmbProizvodjaci.ValueMember = "proizvodjacID"
            cmbProizvodjaci.AutoCompleteMode = AutoCompleteMode.SuggestAppend


        Catch ex As Exception
            connection.Close()
            MessageBox.Show("Desila se neka greška")
        Finally
            connection.Close()

        End Try

Kao što možeš vidjeti u primjeru gore,korištenjem parametera uveliko olakšavaš sebi pisanje upita na bazu. Naravno, komunikacija sa bazom u prezentacionom sloju nije bas najbolja praksa, ali to je sasvim druga priča.

Nadam se da sam malo pomogao ;)
 

Back
Top