[ BrainDemage @ 07.03.2010. 20:39 ] @
Pozdrav svima!
Imam jedno pocetnicko pitanje Na formi imam par textbox-ova,i imam bazu u sql serveru 2005. Kako mogu vrednosti unete u textbox da upisem u bazu koristeci ado.net(DataSet,DataTable)? Unpred se izvijavam ako je bilo slicnih pitanja,ali ja nisam mogao da pronadjem odgovarajucu pomoc...
[ Laki123 @ 07.03.2010. 21:19 ] @
Jedan od načina:
Code:

SqlConnection konekcija = new SqlConnection(...); //ubacis odgovarajuci konekcijski string    
SqlCommand komanda = konekcija.CreateCommand();
komanda.Parameters.AddWithValue("@ime", TextBox1.Text);
komanda.CommandText = "INSERT INTO Osoba(ime) VALUES(@ime)";
komanda.ExecuteNonQuery();
konekcija.Close();
[ BrainDemage @ 07.03.2010. 22:18 ] @
Uradio sam sve kako si naveo,ali jednostavno mi ne pokazuje podatke koje sam prosledio u bazu. Na tvoje parce koda sam dodao i konekcija.Open(),jer je to zahtevalo(nema sta da zatvara bez te linije :-) )
[ Laki123 @ 07.03.2010. 22:57 ] @
Sad sam isprobao na Accessu i radi, nemam SQL instaliran. Da li program javlja neku grešku?
[ BrainDemage @ 07.03.2010. 23:27 ] @
Evo i ja sam probao u Access-u,ali javlja gresku u upitu,dok sa sql bazom,kada kliknem na button,jednostavno se nista ne desava,ne javlja gresku,ali nema ni podataka u bazi.Za sql sam koristio sqlConnction,dok sam za Access koristio ovo dole navedeno.
Code:

 OleDbConnection  konekcija = new OleDbConnection (ConnectionString );//kopiram ga kada dodajem data Source)
            konekcija.Open();
            OleDbCommand  komanda = konekcija.CreateCommand();
            
            komanda.Parameters.AddWithValue("@Ime", txtIme.Text);
            komanda.Parameters.AddWithValue("@Prezime", txtPrezime.Text);
            
         
            komanda.CommandText = "INSERT INTO Tabela(Ime,Prezime) VALUES (@Ime,@Prezime) ";
            komanda.ExecuteNonQuery();
            konekcija.Close();
[ Laki123 @ 07.03.2010. 23:49 ] @
A koju grešku javlja, šta se dešava kad izvršiš upit u Accessu, npr. INSERT INTO Tabela(Ime,Prezime) VALUES ("Petar","Petrovic"), da li ti je primarni ključ auto number ili ne, ako nije onda treba da ga dodaš u upitu.
[ BrainDemage @ 07.03.2010. 23:57 ] @
Primarni kljuc mi nije AutoNumber. Pogledaj sliku sa greskom...
[ Laki123 @ 08.03.2010. 00:57 ] @
Nisam siguran zašto ne radi, možda zato što je ponoć odavno prošla :)
Inače kod Accessa ime parametra je ? i bitan je redosled kojim ih navodiš. Kod SQL kolko se sećam nije bitan raspored, i možeš im davati imena kao što sam i ja u primeru. I u Accessu možeš davati imena "@ID"... ali to neće imati efekta.
Znači kod Accessa ide ovako:
komanda.CommandText = "INSERT INTO Osoba(ID,Ime,Prezime) VALUES (?,?,?) ";
Evo da objasnim kompletan primer.
U Bazi podataka imaš recimo tabelu koja se zove Osoba, i polja ID, Ime, Prezime. ID je Number i to je primarni ključ, Ime i Prezime su text.
Na formi imaš 3 textboxa i jedno dugme. Baza se nalazi na c:\Database1.mdb. Ovaj kod, kod mene radi.
Code:

OleDbConnection konekcija = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\Database1.mdb");
OleDbCommand komanda = konekcija.CreateCommand();
komanda.Parameters.AddWithValue("@ID", textBox1.Text);
komanda.Parameters.AddWithValue("@Ime", textBox2.Text);
komanda.Parameters.AddWithValue("@Prezime", textBox3.Text);
komanda.CommandText = "INSERT INTO Osoba(ID,Ime,Prezime) VALUES (@ID,@Ime,@Prezime) ";
try
{ //ukoliko dodje do greske, program se nece srusiti
    komanda.Connection.Open();
    komanda.ExecuteNonQuery();
}
catch
{
    //ovde se moze napisati koja je greska
}
finally
{
    komanda.Connection.Close();
}
[ BrainDemage @ 08.03.2010. 09:40 ] @
Stvarno ne znam sta je u pitanju,ali kod mene nesto ne funkcionise kako treba. Jel kreiras DataSet? Sa kojom bazom ti je uradjeni primer?
[ AMD guy @ 08.03.2010. 09:55 ] @
Sudeci po slici sto je postavljena rekao bi da je greska u sintaksi kod INSERT komande.
Proveri sintaksu naredbe, i probaj da tu naredbu izvrsis u bazi pa onda u programu.
[ Laki123 @ 08.03.2010. 10:06 ] @
Onaj primer što sam naveo, to je za Access bazu (pošto nemam instaliran SQL Server), koja se zove c:\Database1.mdb. Taj kod što sam poslao, to je sve što treba, znači nema DataSeta.
Kao što je i AMD predložio probaj u SQL Severu ili Accessu da kreiraš upit npr. INSERT INTO Tabela(Ime,Prezime) VALUES ("Petar","Petrovic") i vidi koju grešku će prikazati.
[ sallle @ 08.03.2010. 10:10 ] @
Verovatno je problem u tom primarnom kljucu. posto nije autonumber, moras sam da ga upises, a posto tvojim insert upitom implicitno upisujes null, sql dize exception.

ili podesi primarni kljuc da bude autonumber, ili ga upisi u insert naredbi
[ BrainDemage @ 08.03.2010. 12:56 ] @
Hm,ajde ovako.Potrebno je da sa forme na kojoj se nalaze par textbox-ova,DateAndTime picker...prosledim unete vrednosti u sql bazu koristeci DataSet i DataAdapter na kojem ce mi za to trebati metode Insert,Delete(pretpostavljam).Da li mozete u kratkim crtama da mi kazete kako da to izvedem? Kako bih olaksao muke,bilo bi lepo da koristim wizarde :-)

E sad,za prethodne primere mi je trebalo samo da udjem malo u tematiku sa bazama.Napravio sam u sql serveru bazu sa kolonama ID,Ime,Prezime,nad njom izvrsio Insert upit i to je lepo radilAli problem nastaje kod ado.net-a,no sad to mozemo zanemariti,jer cu morati ja da se potrudim malo,i da pregledam sve lepo. Trenutno mi je primarno resenje za gore navedeni problem.
[ Laki123 @ 08.03.2010. 14:54 ] @
Možeš koristiti SqlCommandBuilder koji sam pravi update,delete,insert. Prvo se iz baze čitaju podaci i ubacuju se u DataSet objekat, zatim taj dataSet možeš koristiti kao izvor podataka za prikazivanje ili izmene. Na kraju pozivaš metod Updata koji će izvršiti promene u bazi.
Code:

SqlConnection konekcija = new SqlConnection(...); //umesto tacaka dodas konekcijski string
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet dataSet = new DataSet();
string upit = "SELECT * FROM Tabela";
adapter.SelectCommand = new SqlCommand(upit, konekcija); //dataAdapter sam otvara konekciju sa bazom, pa ne pisemo konekcija.Open()
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
/*
* CommandBuilder generates insert/update/delete commands for Data adapter based on select command.
* Automatic creation of insert/update/delete commands hinders performance.
* In case one knows the contents of insert/update/delete, should create those explicitly.
* Better to create explicit stored procedures for insert/update/delete and assign those.

* The CommandBuilder uses SelectComand property of DataAdapter to determine values for other commands.
* If there is change in SelectCommand of DataAdapter, remember to call ReferhScheme to update the command properties.

* CommandBuilder se moze koristiti samo ako imamo jednu tabelu, tj. ako nema join nad tabelama.
* U suprotnom umesto CommandBuilder, rucno pisemo komande insert,update,delete za DataAdapter.
*/
adapter.Fill(dataSet);
dataSet.Tables[0].Rows.Add(textBox1.Text, textBox2.Text, textBox3.Text);
adapter.Update(dataSet);
[ BrainDemage @ 08.03.2010. 23:25 ] @
Kad budem resio problem,javicu. Hvala na pomoci i na trudu.
[ cetiririjeke @ 11.03.2010. 14:54 ] @
Nadam se da će ti ovo moje rješenje za insert podataka u AQL bazu podataka pomoći jer kod mene radi:

private void btnOK_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
try
{
conn.ConnectionString = "Server=XXXXXXX;Database=XXXXX;Trusted_Connection=True;";

SqlCommand CmdSql = new SqlCommand("INSERT INTO StavkeRacuna(IDRacun, IDProizvod, NazivProizvoda) values (@IDRacun, @IDProizvod, @NazivProizvoda)", conn);

conn.Open();

CmdSql.Parameters.AddWithValue("@IDRacun", txtIDRacun.Text);
CmdSql.Parameters.AddWithValue("@IDProizvod", txtIDProizvod.Text);
CmdSql.Parameters.AddWithValue("@NazivProizvoda", txtNazivArtikla.Text);

CmdSql.ExecuteNonQuery();

conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
[ BrainDemage @ 12.03.2010. 23:47 ] @
Hvala svima,resio sam problem.