Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 3.395 pregleda

Najnovija ↓

Razni problemi koje ne znam da resim - C# & SQL 18.03.2008. u 21:07 · pre 226 meseci #1
Za ispit treba da uradim aplikaciju za video klub, dodavanje clanova, kaseta,iznajmljivanje, sve sto jedan klub treba da ima.
I evo, vec imam prvi problem, koju ne znam kako da otklonim..(a identican zadatak sam radio pre 3 god, samo nema vise tog koda :( )..pa ako moze neko strucniji da pomogne.

Dizajnirao sam veci deo GUI, napravio klasu Clan, koja sadrzi podatke o clanu, i ima metodu dodajClana, koja treba da upise podatke o novom clanu u tabelu.
Kada se popune text boxovi(ime,prezime,itd...) za dodavanje novog clana, klikne se dugme dodaj, podaci se ne upisu u bazu, i nije mi jasno zasto se ne upisu, pa ako moze pomoc?

klasa Clan:
Code:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Text;
using System.Data.SqlClient;

namespace Video_Klub
{
    class Clan
    {
        private string m_ime, m_prezime, m_adresa, m_telefon;
        private int m_br_clana;
        private double m_zaduzenje;
        private string m_jmbg;
        private DateTime m_datum_uclanjenja;

        public string ime
        {
            get
            {
                return m_ime;
            }
            set
            {   if(value.Length>2)
               m_ime = value;
            }
        }
        public string prezime
        {
            get
            {
                return m_prezime;
            }
            set
            {
                if (value.Length > 3)
                    m_prezime = value;
            }
        }
        public string telefon
        {
            get
            {
                return m_telefon;
            }
            set
            {
                if (value.Length > 4)
                    m_telefon = value;
            }
        }
        public string adresa
        {
            get
            {
                return m_adresa;
            }
            set
            {
                if (value.Length > 10)
                {
                    m_adresa = value;
                }
            }
        }
        public string jmbg
        {
            get
            {
                return m_jmbg;
            }
            set
            {
                if (value.Length > 12)
                {
                    m_jmbg = value;
                }
            }
        }
        public DateTime datum_Uclanjenja
        {
            get
            {
                return m_datum_uclanjenja;
            }
            set
            {
                m_datum_uclanjenja = value;
            }
        }

        public Clan(string _ime, string _prezime, string _adresa, string _telefon, string _jmbg)
        {
            this.m_ime = _ime;
            this.m_prezime = _prezime;
            this.m_adresa = _adresa;
            this.m_telefon = _telefon;
            this.m_jmbg = _jmbg;
            this.m_datum_uclanjenja = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day); 
            this.m_zaduzenje = 0; 
        }

            //pri pozivanju ove funkcije, ne desava se nikakva promena u bazu, koristim VS2005 sa instaliranim SQL express
        public string UpisiClanaUBazu(string _connString )
        {
            SqlConnection konekcija1 = new SqlConnection(_connString);

            SqlCommand komanda1 = new SqlCommand();
            komanda1.Connection = konekcija1; //komanda gleda u konekciju1

            String tekst1 = "insert into clanovi (ime,prezime,adresa,telefon,zaduzenje,jmbg,datum_uclanjenja) values('" + m_ime + " ' , ' " + m_prezime + " ' , ' " + m_adresa + " ',' " + m_telefon + " ', " + m_zaduzenje + " ,' " + m_jmbg + " ',' " + m_datum_uclanjenja.Date + "')";
            
            komanda1.CommandText = tekst1;
            komanda1.CommandType = System.Data.CommandType.Text;

            konekcija1.Open();
            komanda1.ExecuteNonQuery();
            konekcija1.Close(); 
            //salje nazad upit koji sam poslao bazi, mislio sam da nije tu problem, ali deluje sasvim ok
            return (tekst1);
        }
    }
}


Kod forme:

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.Configuration;

namespace Video_Klub
{
    public partial class Form1 : Form
    {
        public void SakriPanele(Panel a)
        {
            List<Panel>lista = new List<Panel>();
            lista.Add(panelPretragaClana);
            lista.Add(panelUpisClana);
            lista.Add(panelUpisFilma);
            lista.Add(panelPretragaFilmova);

            for(int i = 0; i < lista.Count; i++)
            {
               if(lista[i].Name.ToString() != a.Name.ToString())
               {
                   lista[i].Visible=false;
               }
               else
               {
                   lista[i].Visible = true;
               }
            }
        }

        public Form1()
        {
            InitializeComponent();            
        }

        private void izadjiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void upisNovogClanaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SakriPanele(panelUpisClana);            
        }

        private void pretragaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SakriPanele(panelPretragaClana);
        }

        private void dodajNoviToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SakriPanele(panelUpisFilma);
        }

        private void pretraziToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SakriPanele(panelPretragaFilmova);
        }

        //ovde se poziva funkcija da se clan upise u bazu
        private void btnUpisi_Click(object sender, EventArgs e)
        {
            Clan noviClan = new Clan(txbIme.Text, txbPrezime.Text, txbAdresa.Text.ToString(), txbTelefon.Text.ToString(), txbJmbg.Text.ToString());
            string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
                   
            label6.Text = (label6.Text + noviClan.UpisiClanaUBazu(connString)); 
        }

    }
}


Zaboravih da napomenem da u tabeli Clanovi imaju polja br_clana(autoincrement), ostali podaci su svi navedeni u stringu tekst1, svi su nchar, osim zaduzenje(real) i datum_uclanjenja(datetime).


Evo ceo solution ako nekome treba: http://www.sendspace.com/file/1ea52c
Potpis
Re: Razni problemi koje ne znam da resim - C# & SQL 18.03.2008. u 22:54 · pre 226 meseci #2
Aj probaj "prazan" insert into da uradiš, znači upiši samo vrednost za npr. ime pa vidi dal' radi...
Nisi treba da kuckaš ovako:
Code:

"insert into clanovi (ime,prezime,adresa,telefon,zaduzenje,jmbg,datum_uclanjenja) values('" + m_ime + " ' , ' " + m_prezime + " ' , ' " + m_adresa + " ',' " + m_telefon + " ', " + m_zaduzenje + " ,' " + m_jmbg + " ',' " + m_datum_uclanjenja.Date + "')";

nego da sve te promenljive dodaješ pomoću komanda1.Parameters.AddWithValue( ). Tako je teže pogrešiti. :)

A i ovo je čudnovato:
Code:

...
Clan noviClan = new Clan(txbIme.Text, txbPrezime.Text, txbAdresa.Text.ToString(),   ...

Zašto ima ono ToString()?


E da, ako koristiš autonumber da bi dobio broj redova onda možeš da dobiješ netačan rezultat. Npr. dodaš tri reda a onda obrišeš prva dva, pa dodaš još jedan. Autonumber neće dati broj dva za taj novi red. ;)
Ako oćeš da izbrojiš nešto može preko SELECT COUNT komande.
Potpis
Expert Opinions - Niche Articles
Re: Razni problemi koje ne znam da resim - C# & SQL 18.03.2008. u 23:19 · pre 226 meseci #3
Citat:
toxi_programer: Aj probaj "prazan" insert into da uradiš, znači upiši samo vrednost za npr. ime pa vidi dal' radi...
Nisi treba da kuckaš ovako:
Code:

"insert into clanovi (ime,prezime,adresa,telefon,zaduzenje,jmbg,datum_uclanjenja) values('" + m_ime + " ' , ' " + m_prezime + " ' , ' " + m_adresa + " ',' " + m_telefon + " ', " + m_zaduzenje + " ,' " + m_jmbg + " ',' " + m_datum_uclanjenja.Date + "')";

nego da sve te promenljive dodaješ pomoću komanda1.Parameters.AddWithValue( ). Tako je teže pogrešiti. :)

Probao sam, pa nece...ukoliko izostavim neku kolunu koja je obavezna, izbacuje mi se greska, tako da pretpostavljam da je s konekcijom u redu..
Evo koda, mozda sam izostavio nesto, pa zato nece..

Code:

public void UpisiClanaUBazu(string _connString )
        {
            SqlConnection konekcija1 = new SqlConnection(_connString);

            SqlCommand komanda1 = new SqlCommand();
            komanda1.Connection = konekcija1; //komanda gleda u konekciju1

           
            komanda1.Parameters.AddWithValue(ime, "Milos");
            komanda1.Parameters.AddWithValue(prezime, "Zobenica");
            komanda1.Parameters.AddWithValue(adresa, "Gunudliceva 22121");
            komanda1.Parameters.AddWithValue(telefon, "3233232");
            komanda1.Parameters.AddWithValue(jmbg, "12312321123");
                        //polja koja nisu popunjena sam stavio da mogu da budu null

            komanda1.CommandType = System.Data.CommandType.Text;

            konekcija1.Open();
            komanda1.ExecuteNonQuery();
            konekcija1.Close();   
        }



Citat:

A i ovo je čudnovato:
Code:

...
Clan noviClan = new Clan(txbIme.Text, txbPrezime.Text, txbAdresa.Text.ToString(),   ...

Zašto ima ono ToString()?


toString()
Sluzi da se napravi string, mislio sam da mozda nece biti string, ali to je totalno nebitno sada :)


Potpis
Re: Razni problemi koje ne znam da resim - C# & SQL 19.03.2008. u 00:16 · pre 226 meseci
izmenjeno 1 put, poslednji put toxi_programer 19.03.2008. u 00:27
  1. toxi_programer19.03.2008. u 00:27zapis iz teksta poruke
#4
Ovako ćeš, pošto ja ne mogu da probam jer ne mogu kod mene da izmenim strukturu baze ( :( ) :
Prvo podesi da datum učlanjenja može da bude i null. I nemoj ni da predaješ taj argument, samo ga izostavi. Pa vidi jel oće da tako da se upiše.
Potpis
Expert Opinions - Niche Articles
Re: Razni problemi koje ne znam da resim - C# & SQL 19.03.2008. u 00:34 · pre 226 meseci #6
Da, evo izmenio sam.
I radi, kada izostavim datum, znači nisi lepo konvertovao datum. Normalno, ovo radi ako datum postaviš da može biti null

Evo šta sam ukucao:
Code:

SqlConnection konekcija1 = new SqlConnection(_connString);

SqlCommand komanda1 = new SqlCommand();
komanda1.Connection = konekcija1; //komanda gleda u konekciju1

String tekst1 = "insert into clanovi (ime,prezime,adresa,telefon,zaduzenje,jmbg) values('" + m_ime + " ' , ' " + m_prezime + " ' , ' " + m_adresa + " ',' " + m_telefon + " ', " + m_zaduzenje + " ,' " + m_jmbg + " ')";
string sqlSelect = "SELECT * FROM clanovi";
komanda1.CommandText = tekst1;
komanda1.CommandType = System.Data.CommandType.Text;
SqlDataAdapter adapter = new SqlDataAdapter(komanda1);
System.Data.DataTable table = new System.Data.DataTable();
konekcija1.Open();
komanda1.ExecuteNonQuery();
komanda1.CommandText = sqlSelect;
adapter.Fill(table);
System.Windows.Forms.MessageBox.Show("Ukupno: " + table.Rows.Count.ToString());
konekcija1.Close(); 

return (tekst1);


Potpis
Expert Opinions - Niche Articles
Re: Razni problemi koje ne znam da resim - C# & SQL 19.03.2008. u 00:47 · pre 226 meseci #7
Pa stavljen mi je bio date da moze biti null, nije htelo, kad sam stavio tvoj kod, nece ni tada...
Nemam pojma sada...pokusacu sutra reinstall ili na drugom racunaru da pokrenem kod..

Mada, MessageBox mi izbaci: Ukupno: 1

Videcu sutra sta ce biti pa javljam...
Potpis
Re: Razni problemi koje ne znam da resim - C# & SQL 19.03.2008. u 16:03 · pre 226 meseci #8
Probao na drugom racunaru, nece..
Sve(osim br_clana koji je primary key) sam stavio da mzoe da bude null, upisem neke podatke(nisam datum upisivao), i nece da mi se sacuvaju...
Si siguran da tvoj kod tako ide? Mozes li jos jednom da proveris?
Potpis
Re: Razni problemi koje ne znam da resim - C# & SQL 19.03.2008. u 16:19 · pre 226 meseci #9
Juče sam probao. Kod koji sam iznad napisao prekopiraj da bude unutar tvoj fajla Clan.cs, u funkciju UpisiClanaUBazu().
Zatim pokreni program i klikni tamo da upišeš novog člana, unesi neke podatke i pritisni deset puta ono dugme. Biće prikazano da je deset redova dodato... :)
Potpis
Expert Opinions - Niche Articles
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme