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

Pocetni Problem sa Insert,update...

[es] :: .NET :: Pocetni Problem sa Insert,update...

[ Pregleda: 1935 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

spezia

Član broj: 134818
Poruke: 355
*.sc.ni.ac.yu.



+6 Profil

icon Pocetni Problem sa Insert,update...26.10.2008. u 18:52 - pre 188 meseci
Pravim formu za unos podataka u bazu ili update...
I nikako da upise podatak ,a jos manje azurira...
Stavicu problem za UPDATE ...
U knjizi je uradjen primer za konzolu slican,a ja ne vidim gde gresim.Tacnije u knjizi nije jasno uradjen primer. Ove kod za dugme SAVE ,kada vec popunimo TextBox-ove podacima i zelimo da azuriramo bazu.
Evo koda
Code:

private void btnEditSaveUser_Click(object sender, EventArgs e)
        {
            string conn2 = "provider=Microsoft.Jet.OLEDB.4.0;data source=book.mdb";
            OleDbConnection connect2 = new OleDbConnection(conn2);

           string userUpdate = "Update member SET IDmember=@IDmember,name=@name,lastname=@lastname," +
                             "location=@location,street=@street,streetnum=@streetnum,expired=@expired," +
                             "bookdate=@bookdate,bookser=@bookser";
 OleDbCommand editCommand = connect2.CreateCommand();
           editCommand.CommandText = updateString;
           // dodatak Add metode
           editCommand.Parameters.Add("@userID", OleDbType.Char, 10);
           editCommand.Parameters["@userID"].Value = 21;

          editCommand.Parameters.Add("@IDmember", OleDbType.BigInt, 10);
          editCommand.Parameters.Add("@name", OleDbType.Char, 20);
          editCommand.Parameters.Add("@lastname", OleDbType.Char, 20);
         editCommand.Parameters.Add("@location", OleDbType.Char, 20);
           editCommand.Parameters.Add("@street", OleDbType.Char, 20);
           editCommand.Parameters.Add("@streetnum", OleDbType.Integer, 10);
           editCommand.Parameters.Add("@expired", OleDbType.Date, 10);
           editCommand.Parameters.Add("@bookdate", OleDbType.Date, 10);
           editCommand.Parameters.Add("@bookser", OleDbType.Char, 10); 
           // stavljanje vrednosti za promenljive
         editCommand.Parameters["@IDmember"].Value = 10002;
         editCommand.Parameters["@name"].Value = "Mikica";
         editCommand.Parameters["@lastname"].Value ="Tipic";
         editCommand.Parameters["@location"].Value = txtLocation.Text; // vrednost TextBox polja koje smo uneli
          editCommand.Parameters["@street"].Value = txtStreet.Text;
          editCommand.Parameters["@streetnum"].Value = txtStreetNum.Text;
          editCommand.Parameters["@expired"].Value = txtExpired.Text;
          editCommand.Parameters["@bookdate"].Value = txtBookDate.Text;
          editCommand.Parameters["@bookser"].Value = txtIDbook.Text;
               // izvrsavanje upita
           editCommand.ExecuteNonQuery();
           
        }
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.243.*



+104 Profil

icon Re: Pocetni Problem sa Insert,update...26.10.2008. u 22:08 - pre 188 meseci
Nisi rekao koja je greška.

Koliko mogu iz ovoga da primetim imaš nekoliko grešaka:
1. nemaš otvaranje konekcije "connect2.open"
2. u editCommand dodaješ parametar @UserID, ali taj parametar se ne koristi u samom upitu
3. kad izvršiš upit svi slogovi u bazi će ti biti promenjeni jer nigde ne ograničavač na kojim redovima vršiš update (iskoristi @UserID koji si definisao kao parametar)

Inače kod može i kraće da se napiše
Code:

      editCommand.Parameters.Add("@IDmember", OleDbType.BigInt, 10);
      editCommand.Parameters["@IDmember"].Value = 10002;


može da se napiše kao
Code:

      editCommand.Parameters.Add("@IDmember", OleDbType.BigInt, 10).Value = 10002;     


i time dobijaš dupo manji broj linija i malo je jasnije za čitanje
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

spezia

Član broj: 134818
Poruke: 355
*.sc.ni.ac.yu.



+6 Profil

icon Re: Pocetni Problem sa Insert,update...27.10.2008. u 00:24 - pre 188 meseci
Ma ima u upitu "WHERE IDmember=@userID"...
U ocajnom pokusaju gledao sam da uprostim...
Recimo SELECT mi radi...Ne radi Update,insert...
A greska je da ne azurira polje ,ne vrsi upis u bazu...Baza mi je u Debug pored exe verzije.
Evo celog koda kako treba da bude (po meni)
Code:

private void btnEditSaveUser_Click(object sender, EventArgs e)
        {
            string conn2 = "provider=Microsoft.Jet.OLEDB.4.0;data source=book.mdb";
            OleDbConnection connect2 = new OleDbConnection(conn2);
            connect2.Open();
            string userUpdate = "Update member SET IDmember=@IDmember,name=@name,lastname=@lastname," +
                              "location=@location,street=@street,streetnum=@streetnum,expired=@expired," +
                              "bookdate=@bookdate,bookser=@bookser WHERE IDmember=@userID";
            
                           
           OleDbCommand editCommand = connect2.CreateCommand();
          editCommand.CommandText = userUpdate;
           // dodatak Add metode
           editCommand.Parameters.Add("@userID", OleDbType.Char, 10);
           editCommand.Parameters["@userID"].Value = 21;

           editCommand.Parameters.Add("@IDmember", OleDbType.BigInt, 10);
           editCommand.Parameters.Add("@name", OleDbType.Char, 20);
           editCommand.Parameters.Add("@lastname", OleDbType.Char, 20);
           editCommand.Parameters.Add("@location", OleDbType.Char, 20);
           editCommand.Parameters.Add("@street", OleDbType.Char, 20);
           editCommand.Parameters.Add("@streetnum", OleDbType.Integer, 10);
           editCommand.Parameters.Add("@expired", OleDbType.Date, 10);
           editCommand.Parameters.Add("@bookdate", OleDbType.Date, 10);
           editCommand.Parameters.Add("@bookser", OleDbType.Char, 10); 
           // stavljanje vrednosti za promenljive
          editCommand.Parameters["@IDmember"].Value = txtIDmember.Text;
           editCommand.Parameters["@name"].Value = txtUserName.Text;
          editCommand.Parameters["@lastname"].Value = txtUserLast.Text ;
          editCommand.Parameters["@location"].Value = txtLocation.Text;
           editCommand.Parameters["@street"].Value = txtStreet.Text;
          editCommand.Parameters["@streetnum"].Value = txtStreetNum.Text;
           editCommand.Parameters["@expired"].Value = txtExpired.Text;
          editCommand.Parameters["@bookdate"].Value = txtBookDate.Text;
          editCommand.Parameters["@bookser"].Value = txtIDbook.Text;
               // izvrsavanje upita
           editCommand.ExecuteNonQuery();
           connect2.Close();
        }
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
80.93.229.*

ICQ: 20785904


+4 Profil

icon Re: Pocetni Problem sa Insert,update...27.10.2008. u 09:31 - pre 188 meseci
ne mozes stringove da prosledjujes kao parameters values...konvertuj te silne textbox.Text u odgovarajuci tip.
 
Odgovor na temu

spezia

Član broj: 134818
Poruke: 355
*.sc.ni.ac.yu.



+6 Profil

icon Re: Pocetni Problem sa Insert,update...27.10.2008. u 12:23 - pre 188 meseci
Nisam te najbolje razumeo ...
Pokusao sam recimo za prvi primer OleDbType.BigInt ili samo int.
Neznam koje tipove dozvoljava Value.Uglavnom mi izbacuje ne moze da konvertuje 'string' u 'tip'...
Moze mali primer na sta si konkretno mislio.
Hvala
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
80.93.229.*

ICQ: 20785904


+4 Profil

icon Re: Pocetni Problem sa Insert,update...27.10.2008. u 15:13 - pre 188 meseci

Code:

editCommand.Parameters["@IDmember"].Value = Convert.ToInt64(txtIDmember.Text);
editCommand.Parameters.Add("@expired", OleDbType.Date, 10); = Convert.ToDateTime(txtExpired.Text); /*ovde ces imati verovatno zajebanciju (treba da zoves overridovanu Convert.ToDateTime(string, iformat...), pa da mu kazes koji je format*/
//@bookdate kao i prethodni
editCommand.Parameters["@streetnum"].Value = Convert.ToInt32(txtStreetNum.Text);

znaci kao value treba da dostavljas .net tipove koji su "ekvivalentni" ili moze da se izvrsi preslikavanje u odgovorajuce sql tipove...
sql / .net:
bit - bool
integer - int
money - decimal
char(n) - string
varchar(n) - string
itd...

za te stringovne tipove u bazi, najbolje je da koristis nvarchar (varijabilna duzina, sa podrskom za unicode)

 
Odgovor na temu

spezia

Član broj: 134818
Poruke: 355
*.sc.ni.ac.yu.



+6 Profil

icon Re: Pocetni Problem sa Insert,update...27.10.2008. u 16:31 - pre 188 meseci
Radim sa Access bazom,posto mi je i mali projekat a i lakse je tako predstaviti profesoru.
Uradio sam ,kako si rekao i opet ne upisuje.
Prvo mi je javljao gresku @location dont have default value.
A ako izbrisem taj red.onda ide redom street dont have dafoult value...Cudno sto preskace IDmember i LastName.Kao
da su ispravno.
Sada mi vise to ne javlja ali zato nista se i ne desava.
Ako je lakse mogu da postavim ceo kod od using ...
Izbacio sam privremeno i redove za Date ,koje kazes da mozda ce praviti problem i opet isto.
ne javlja gresku ali i ne upisuje.
Da li recimo treba da stavim neke default vrednosti ako ne update-ujem sva polja.
Mada meni pri editovanju sva polja su popunjena.

[Ovu poruku je menjao spezia dana 27.10.2008. u 17:42 GMT+1]
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
*.adsl.beotel.net.

ICQ: 20785904


+4 Profil

icon Re: Pocetni Problem sa Insert,update...27.10.2008. u 22:12 - pre 188 meseci

trebalo je samo izmenis datetime, int i sl parametre. a ostale da ostavis (ne da ih izbrises).
 
Odgovor na temu

spezia

Član broj: 134818
Poruke: 355
*.sc.ni.ac.yu.



+6 Profil

icon Re: Pocetni Problem sa Insert,update...28.10.2008. u 00:37 - pre 188 meseci
Ostavio sam .Nisam brisao .Kasnije pise i da expired nema default value....
Nije do toga.Radio sam ovaj primer po knjizi.Od slova do slova...i radi samo delete.
Dok za insert i update javlja gresku.
Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;   //for MS Access

namespace ebook2
{
    public partial class Form1 : Form
    {
        private DataTable dataTable;
        private OleDbConnection conn;
        private OleDbDataAdapter dataAdapter;
        private DataSet ds;
        private int currRec = 0;
        private int totalRec=0;
        private bool insertSelected;
    
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void FillControls()
        {
            txtID.Text=dataTable.Rows[currRec]["id"].ToString();
            txtName.Text=dataTable.Rows[currRec]["name"].ToString();
            txtLast.Text=dataTable.Rows[currRec]["lastname"].ToString();
            txtJob.Text=dataTable.Rows[currRec]["job"].ToString();

        }

        private void btnLoadTable_Click(object sender, EventArgs e)
        {
            //MS Access
            this.Cursor = Cursors.WaitCursor;
            string targetConnection="provider=Microsoft.Jet.OLEDB.4.0;data source=baza_krofni.mdb";
            conn=new OleDbConnection(targetConnection);
            string commandString="SELECT * FROM person";
             dataAdapter=new OleDbDataAdapter(commandString,conn);
             ds=new DataSet();
            dataAdapter.Fill(ds,"prog");
            dataTable=ds.Tables["prog"];
            currRec=0;
            totalRec=dataTable.Rows.Count;
            FillControls();
            InitalizeCommands();
            ToggleControls(true);

            this.Cursor=Cursors.Default;

            //btnNext.Enabled=true;
            //btnPrevious.Enabled=true;


        }
        private void InitalizeCommands()
        {
            // preparing insert OleDB command
            dataAdapter.InsertCommand = conn.CreateCommand();
            dataAdapter.InsertCommand.CommandText = "INSERT INTO person (id,name,lastname,job)" +
                                                  "VALUES (@id,@name,@lastname,@job)";
            AddParams(dataAdapter.InsertCommand, "id", "name", "lastname", "job");

            // preparing Update OleDB command
            dataAdapter.UpdateCommand = conn.CreateCommand();
            dataAdapter.UpdateCommand.CommandText = "UPDATE person SET name=@name,lastname=@lastname,job=@job WHERE id=@id";
            AddParams(dataAdapter.UpdateCommand, "id", "name", "lastname", "job");

            // preparing delete OleDB command
            dataAdapter.DeleteCommand = conn.CreateCommand();
            dataAdapter.DeleteCommand.CommandText = "DELETE FROM person WHERE id=@id";
            AddParams(dataAdapter.DeleteCommand, "id");

        }
        private void AddParams(OleDbCommand cmd, params string[] cols)
        {

            foreach (string col in cols)
            {
                cmd.Parameters.Add("@" + col, OleDbType.Char, 0, col);

            }
        }

        private void ToggleControls(bool val)
        {
            txtID.ReadOnly = val;
            txtName.ReadOnly = val;
            txtLast.ReadOnly = val;
            txtJob.ReadOnly = val;

            btnLoadTable.Enabled = val;
            btnNext.Enabled = val;
            btnPrevious.Enabled = val;
            btnDeleteRecord.Enabled = val;
            btnEditRecord.Enabled = val;
            btnInsertRecord.Enabled = val;

            btnCancel.Enabled = !val;
            btnSave.Enabled = !val;

        }  

        private void btnNext_Click(object sender, EventArgs e)
        {
            currRec++;
            if (currRec >= totalRec)
                currRec = 0;
            FillControls();
        }

        private void btnPrevious_Click(object sender, EventArgs e)

        {
            currRec--;
            if (currRec < 0)
                currRec = totalRec - 1;
            FillControls();
        }

        private void btnEditRecord_Click(object sender, EventArgs e)
        {
            ToggleControls(false);
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            lblLabel.Text = "Save changes...";
            this.Cursor = Cursors.WaitCursor;
            DataRow row = dataTable.Rows[currRec];
            row.BeginEdit();
            row["id"] = Convert.ToInt32(txtID);
            row["name"] = txtName;
            row["lastname"] = txtLast;
            row["job"] = txtJob;
            row.EndEdit();
            dataAdapter.Update(ds, "prog");
            ds.AcceptChanges();
            ToggleControls(true);
            insertSelected=false;
            this.Cursor = Cursors.Default;
            lblLabel.Text = "Save changed";


        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            if (insertSelected)
            {
                btnDeleteRecord_Click(null, null);
                insertSelected = false;
            }
            FillControls();
            ToggleControls(true);
        }

        private void btnInsertRecord_Click(object sender, EventArgs e)
        {
            insertSelected = true;
            DataRow row = dataTable.NewRow();
            dataTable.Rows.Add(row);
            totalRec = dataTable.Rows.Count;
                currRec=totalRec-1;
            row["id"]=totalRec;
            txtID.Text = totalRec.ToString();
            txtName.Text = "";
            txtLast.Text = "";
            txtJob.Text = "";
            ToggleControls(false);


        }

        private void btnDeleteRecord_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Da li sigurno brisete \n", "Potvrdi\n", MessageBoxButtons.YesNo);
            if (res == DialogResult.Yes)
            {
                DataRow row=dataTable.Rows[currRec];
                row.Delete();
                dataAdapter.Update(ds, "prog");
                ds.AcceptChanges();
                lblLabel.Text = "Record Deleted";
                totalRec--;
                currRec = totalRec - 1;
                FillControls();

            }
        }
    }
}



Ja sam ocekivao da je Insert,Update ,Delete osnova C# sa bazom.Koliko vidim ispade da nije lako ...
Javja gresku
Code:

Unable to cast object of type 'System.Windows.Forms.TextBox' to type 'System.IConvertible'.
// Ukazuje na red

 row["id"] = Convert.ToInt32(txtID);


 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
80.93.229.*

ICQ: 20785904


+4 Profil

icon Re: Pocetni Problem sa Insert,update...28.10.2008. u 08:43 - pre 188 meseci
zato sto ne mozes objekat klase TextBox da dodjeljujes.

kod treba da glasi:

Code:

 row["id"] = Convert.ToInt32(txtID.Text);

pri cemu, ukoliko u to polje ne upises nesto sto moze da se konvertuje u int, bacice ti exception... (cak i ako ga ostavis prazno)
 
Odgovor na temu

spezia

Član broj: 134818
Poruke: 355
*.sc.ni.ac.yu.



+6 Profil

icon Re: Pocetni Problem sa Insert,update...28.10.2008. u 09:01 - pre 188 meseci
Glupa greska.
Najbolje je da ja ovu verziju prilagodim sebi i izmenim kod...
Hvala
 
Odgovor na temu

spezia

Član broj: 134818
Poruke: 355
*.sc.ni.ac.yu.



+6 Profil

icon Re: Pocetni Problem sa Insert,update...28.10.2008. u 18:18 - pre 188 meseci
Sve radi osim Update koji mi najvise znaci...Posto mi je projekt Biblioteka.
Kada ucitam polja ,izvrsim izmenu i kliknem na Save:
Javlja gresku : the Update command affected 0 of expected 1 records.
Radi mi Insert,select i delete...a ovo samo nece.
 
Odgovor na temu

[es] :: .NET :: Pocetni Problem sa Insert,update...

[ Pregleda: 1935 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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