Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problem oko Update

[es] :: .NET :: problem oko Update

[ Pregleda: 1589 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mvasicdo
Mladen Vasic
Doboj

Član broj: 104294
Poruke: 226
*.teol.net.



Profil

icon problem oko Update19.01.2007. u 15:14 - pre 210 meseci
Pozdrav svima,
evo koda koji me muci:

Code:
private DataTable dTable;

        public Form1()
        {
            InitializeComponent();
        }
        private OleDbConnection CN = new OleDbConnection();

        private void Form1_Load(object sender, EventArgs e)
        {
            string sProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\projects\\c#\\Registar\\Registar\\bin\\Debug\\Data\\data.mdb;Persist Security Info=False;Jet OLEDB:Database Password=";
            CN.ConnectionString = sProvider;
            CN.Open();

            dTable = new DataTable();
            DataColumn colZavrseno = new DataColumn("status", typeof(bool));
            DataColumn colZadatak = new DataColumn("zadatak", typeof(string));
            DataColumn colPrezime = new DataColumn("prezime", typeof(string));
            DataColumn colIme = new DataColumn("ime", typeof(string));
            DataColumn colRJ = new DataColumn("rj", typeof(string));
            DataColumn colDatum = new DataColumn("datum", typeof(string));
            DataColumn colIzvrsenje = new DataColumn("izvrsenje", typeof(string));
            DataColumn colKR = new DataColumn("kljucna_rijec", typeof(string));
            dTable.Columns.Add(colZavrseno);
            dTable.Columns.Add(colZadatak);
            dTable.Columns.Add(colPrezime);
            dTable.Columns.Add(colIme);
            dTable.Columns.Add(colRJ);
            dTable.Columns.Add(colDatum);
            dTable.Columns.Add(colIzvrsenje);
            dTable.Columns.Add(colKR);

            dataGridView1.DataSource = dTable;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OleDbCommand selectCommand = new OleDbCommand("select status,zadatak,prezime,ime,rj,datum,izvrsenje,kljucna_rijec from zadatak",CN);

            OleDbDataReader dReader = null;

            dReader = selectCommand.ExecuteReader();

            if (dReader.HasRows)
            {
                while (dReader.Read())
                {
                    dTable.Rows.Add(dReader["status"], dReader["zadatak"], dReader["prezime"], dReader["ime"], dReader["rj"], dReader["datum"], dReader["izvrsenje"], dReader["kljucna_rijec"]);
                }
            }
            dReader.Close();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            OleDbDataAdapter adapter = new OleDbDataAdapter("select * from zadatak", CN);
            OleDbCommandBuilder mySqlCommandBuilder = new OleDbCommandBuilder(adapter);
           
            adapter.Update(dTable);
        }



Novi red dodajem na ovaj nacin:

Code:
DataRow row;
row = dTable.NewRow();
row["status"] = false;
row["zadatak"] = "zadatak";
row["prezime"] = "prezime";
row["ime"] = "ime";
row["rj"] = "rj";
row["datum"] = "10.01.2007";
row["izvrsenje"] = "izvrsenje";
row["kljucna_rijec"] = "kljucna rijec";
dTable.Rows.Add(row);



Problem je sledeci (npr. u tabeli u bazi ima 5 redova):
Kada uradim neke izmjene na dataGridView1, npr. izmjenim sadrzaj neke celije ili dodam novi red, klikom da dugme button2 (button2_Click) treba da mi se apdejtuje tabela u bazi sa novim sadrzajem dataGridView1 odnosno dTable. Umjesto sto apdejtuje postojece on mi na postojece doda citav sadrzaj tabele dataGridView1 (dTable) sa izmjenama.
Nemam pojma zasto se ovo desava ali ako neko ima neku ideju zasto se ovo desava molim da mi sto prije odgovori.
[code][code][code]
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: problem oko Update19.01.2007. u 15:40 - pre 210 meseci
Mozda bi ti bilo pametnije da prebacis deklaracije konekcije, dataadaptera gde deklarises ostale clanove klase tvoje forme, tamo ispod deklaracije datatabele, i da dodaj jos jedan netipizirani dataset.
Malo mi je nelogicno ovo kako ti radis... barem deo sa readerom nema potrebe da ga koristis - zasto ne uradis citanje podataka sa metodom Fill tvog dataadaptera kome ces proslediti referencu na tvoju datatabelu? Uglavnom su ti svi primeri na netu i po knjigama tako....
Kada budes imao i dataset mocices da pozoves i metod AcceptChanges tvog dataseta cime ces izbeci to tvoje dupliranje podataka koji te muci.
Malo sam ti odgovorio ovako, ne bas precizno i konkretno, da bi procitao malo o radu sa datasetovima i adapterima...
Pozdrav, nadam se da sam ti pomogao!

RTFM
 
Odgovor na temu

mvasicdo
Mladen Vasic
Doboj

Član broj: 104294
Poruke: 226
*.teol.net.



Profil

icon Re: problem oko Update19.01.2007. u 17:40 - pre 210 meseci
Ako koristim OleDbDataAdapter i njegovu metodu Fill sve mi radi kako treba.
OleDbDataReader sam koristio da ucitavajuci red po red podataka mogu inkrementirati StatusBar...

Sve u svemu hvala na odgovoru
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: problem oko Update19.01.2007. u 17:48 - pre 210 meseci
Po meni je dovoljno staviti WaitCursor kada ucitavas podatke iz baze (za taj deo sekunde ili koju sekundu)... osim ako nemas koji milion slogova (sto verovatno nemas) ili ako moras korisniku bas precizno predstaviti koliko je prevuceno slogova, koliko je jos ostalo ... sto takodje verovatno ne moras ;)
Pozdrav!
RTFM
 
Odgovor na temu

vladdy
Chicago, USA

Član broj: 30119
Poruke: 137
*.dsl.emhril.ameritech.net.

Sajt: www.pro-transport.com


Profil

icon Re: problem oko Update19.01.2007. u 18:15 - pre 210 meseci
Mozda nece da stavlja WaitCursor. To UI blokiranje je veoma kriticno i sve ispod pola sekunde stvara losu sliku o aplikaciji.
Zato su i uveli BackgroundWorker u 2.0 kao jednostavni multi-threading ali to je vec malo advanced tema.

Ovaj CommandBuilder zna biti veoma neprecizan a posebno ako ocekujes od njega da kreira komande na osnovu "SELECT * FROM table_name". Tu nemas ni kolone, ni PK nista.
Ako neces da koristis DataAdapter i Update mozes da ides red po red i izvrsavas komande zasebno kroz SQL.ExecuteNonQuery.

SQLCommand.text = UpdateSQL (dinamicki kreiran) ili mozes da koristis stored procs (svakako bolji, brzi i sigurniji metod metod)

Znaci na ovu foru:

Code:

SQLConnection.open
For Each CurrentRow As DataRow In dTable.Rows
                OleDBCommand.CommandText = String.format("Update tablename SET column_name='{0}'", CurrentRow ("column_name").tostring)
                OleDBCommand.ExecuteNonQuery()
Next
SQLConnection.close


naravno, ovo prilagodis slucaju koji ti imas.

Ako imas nove redove, samo provjeri za currentrow.RowState i ako je DataRowState.Added izvrsi INSERT komandu. Isto i za obrisane redove. Na ovu foru:
Code:

Select Case CurrentRow.RowState
                    Case DataRowState.Added
                        'RUN INSERT COMMAND
                    Case DataRowState.Deleted, DataRowState.Detached
                        'RUN DELETE COMMAND
                    Case DataRowState.Modified
                        'RUN UPDATE COMMAND
                End Select


Kod nije bas precizan, pisem iz glave ali poenta je tu.

Ili ove komplikacije ili jednostavno kroz Adapter.Fill.
http://www.pro-transport.com - The most advanced trucking software on the market
 
Odgovor na temu

mvasicdo
Mladen Vasic
Doboj

Član broj: 104294
Poruke: 226
*.teol.net.



Profil

icon Re: problem oko Update20.01.2007. u 17:34 - pre 210 meseci
Ok, hvala vam svima na odgovorima. Ipak cu koristiti Fill metodu DataAdapter-a i wait cursor dok ne pronadjem neko drugo rijesenje...
 
Odgovor na temu

[es] :: .NET :: problem oko Update

[ Pregleda: 1589 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.