none
Gerekli bir veya daha fazla parametre için girilen değer yok. RRS feed

  • Soru

  • Merhabalar, 10.sınıf bilişim öğrencisiyim Programlama Temelleri Dersinden Proje Aldım, stok takip programı yapmam gerekiyor, 10.sınıfta öğretilen bilgiler çok yetersiz olduğu için internetten videolar izleyerek yapmaya çalışıyorum fakat "Stok Güncelle" "Resim Ekleme" ve "Kayıtlı Verileri Aratma" bölümlerinde takıldım, sürekli hata alıyorum, lütfen yardımcı olun.

    public partial class Form2 : Form
        {
            OleDbConnection con;
            OleDbDataAdapter da;
            OleDbCommand cmd;
            //OleDbDataReader dr;
            DataSet ds;
            public Form2()
            {
                InitializeComponent();
            }
            void griddoldur()
            {
                con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ctkveritabanı.mdb");
                da = new OleDbDataAdapter("Select *from stokbil", con);
                ds = new DataSet();
                con.Open();
                da.Fill(ds, "stokbil");
                dataGridView1.DataSource = ds.Tables["stokbil"];
                con.Close();
                try
                {
                    dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                   dataGridView1.Columns[0].HeaderText = "STOK ADI";
                    dataGridView1.Columns[1].HeaderText = "STOK MODELİ";
                   dataGridView1.Columns[2].HeaderText = "STOK SERİNO";
                    dataGridView1.Columns[3].HeaderText = "STOK ADEDİ";
                   dataGridView1.Columns[4].HeaderText = "STOK TARİH";
                   dataGridView1.Columns[5].HeaderText = "KAYIT YAPAN";
                    dataGridView1.Columns[0].Width = 120;
                    dataGridView1.Columns[1].Width = 120;
                   dataGridView1.Columns[2].Width = 120;
                   dataGridView1.Columns[3].Width = 80;
                   dataGridView1.Columns[4].Width = 100;
                    dataGridView1.Columns[5].Width = 120;
                }
                catch
                {
    
                }
            }
            
            
            private void  bunifuFlatButton4_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void textBox2_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void bunifuFlatButton5_Click(object sender, EventArgs e)
            {
                if (bunifuMaterialTextbox1.Text != "" && bunifuMaterialTextbox2.Text != "" && bunifuMaterialTextbox3.Text != "" && bunifuMaterialTextbox4.Text != "" && bunifuMaterialTextbox5.Text != "")
                {
                    
                     cmd = new OleDbCommand();
                     con.Open();
                     cmd.Connection = con;
                    cmd.CommandText = "INSERT INTO stokbil(stokAdi,stokModeli,stokSeriNo,stokAdedi,stokTarih,kayitYapan) VALUES ('" + bunifuMaterialTextbox1.Text + "','" + bunifuMaterialTextbox2.Text + "','" + bunifuMaterialTextbox3.Text + "','" + bunifuMaterialTextbox4.Text + "','" + dateTimePicker1.Text + "','" + bunifuMaterialTextbox5.Text + "')";
                    cmd.ExecuteNonQuery();
                    con.Close();
                    griddoldur();
                    MessageBox.Show("Kayıt Tamamlandı");
                    
                }
                else
                {
                    MessageBox.Show("Boş Alan Bırakmayın!");
    
                }
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
                griddoldur();
            }
    
            private void bunifuFlatButton8_Click(object sender, EventArgs e)
            {
                bunifuMaterialTextbox1.Text = "";
                bunifuMaterialTextbox2.Text = "";
                bunifuMaterialTextbox3.Text = "";
                bunifuMaterialTextbox4.Text = "";
                bunifuMaterialTextbox5.Text = "";
            }
            
    
            private void bunifuFlatButton6_Click(object sender, EventArgs e)
            {
                DialogResult c;
                c = MessageBox.Show("Silmek İstediğinize  Emin Misiniz?", "Uyarı!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (c == DialogResult.Yes)
                {
    
    
                cmd = new OleDbCommand();
                con.Open();
                cmd.Connection = con;
                cmd.CommandText = "DELETE from stokbil WHERE stokSeriNo='" + dataGridView1.CurrentRow.Cells[2].Value.ToString() + "'";
                cmd.ExecuteNonQuery();
                con.Close();
                griddoldur();
                    
                   
                }
            }
    
            private void bunifuFlatButton2_Click(object sender, EventArgs e)
            {
                
                
            }
    
            private void bunifuFlatButton3_Click(object sender, EventArgs e)
            {
                Form3_detaylıArama frm3 = new Form3_detaylıArama();
                frm3.Show();
                this.Hide();
            }
    
            private void bunifuFlatButton7_Click(object sender, EventArgs e)
            {
                cmd = new OleDbCommand();
                con.Open();
                cmd.Connection = con;
                cmd.CommandText = "update stokbil set stokModeli='" + bunifuMaterialTextbox2.Text + "',stokSeriNo='" + bunifuMaterialTextbox3.Text + "',stokAdedi='" +bunifuMaterialTextbox4.Text +"',stokTarih='"+dateTimePicker1.Text+"',kayitYapan='"+bunifuMaterialTextbox5.Text+ "' where stokAdi" + bunifuMaterialTextbox1.Text + "";
                cmd.ExecuteNonQuery();
                con.Close();
                griddoldur();
              
    
    
            }
    
            private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
            {
                bunifuMaterialTextbox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
                bunifuMaterialTextbox2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
                bunifuMaterialTextbox3.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
                bunifuMaterialTextbox4.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
                dateTimePicker1.Text = dataGridView1.CurrentRow.Cells[4].Value.ToString();
                bunifuMaterialTextbox5.Text = dataGridView1.CurrentRow.Cells[5].Value.ToString();
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ctkveritabanı.mdb");
                da = new OleDbDataAdapter("Select *from stokbil where stokAdi like '" + textBox1 + "%'", con);
                ds = new DataSet();
                con.Open();
                da.Fill(ds, "stokbil");
                dataGridView1.DataSource = ds.Tables["stokbil"];
                con.Close();

    Projemin linki bu; https://drive.google.com/open?id=1ByFKn6BtARVpamsY0cJTjv2XV6bW7Dej

    23 Nisan 2019 Salı 13:28

Yanıtlar

  • Projenin deadline'ına daha varsa yada kodu daha güzel bir biçime getirmek adına yada kendinizi geliştirmeniz amaçlı :

    1-O gördüğüm yanılmıyorsam Access onun yerine  MSSQL,MySQL,SQLite,LiteDb vb. kullanın.(veritabanı kullanın)

    2-SQL kodlarında parametre yok doğrudan sql cümlesinin içerisine atama var bu durumda eğer ben ilgili textbox'a bir SQL kodu yazsam çalıştırabilirim.(Güvenlik açığı /SQL injection)

    3-Direkt Butonların arkasına kodlar yazmışsınız yani eğer siz arayüzü değiştirmek durumunda kalırsanız kodlarıda sil baştan yazacaksınız bu büyük külfet.

    4-Bu konuda pek tecrübeli değilim ama belki ado.net ile birlikte Singleton pattern kullanılabilir.

    5-ADO.NET öğrenmek veritabanı mantığını anlamaya çok yardımcı oluyor ancak Entity framework CRUD işlemleri sadece bir iki satır sürüyor.


    NOT:Çetin abi bu defa sen benden hızlı davranmışsın görmedim abi yazdığını :D 
    23 Nisan 2019 Salı 14:23

Tüm Yanıtlar

  • Update sorgunuzda hata var. Sorgunun sonundaki "where stokAdi" ile başlayan alanı aşağıdaki şekilde değiştirin.

    where stokAdi='" + bunifuMaterialTextbox1.Text + "'";

    Mustafa Taş

    23 Nisan 2019 Salı 13:44
  • Çok teşekkür ederim, stok adı bölümü hariç diğer bölümleri güncelleyebiliyorum, stok adının da güncellenmesi için nereyi düzeltmem gerekiyor?
    23 Nisan 2019 Salı 14:01
  • Kodunuzda o kadar çok hata var ki :(

    Adim adim gidin, su anda en büyük hatanız:

    "update stokbil set stokModeli='" + bunifuMaterialTextbox2.Text  ...

    seklinde kullanıcıdan gelen degerleri kullanarak string birleştiren SQL komutları. SQL komutlarını bu sekilde ASLA ve ASLA yazmayın, o sekilde yazildigini gösteren kitap, video, hoca ... ASLA ve ASLA takip etmeyin. Aslinda sadece bunu yapsaniz, hatanızın ne oldugunu da hemen gorursunuz.

    Belki hata sayılmaz ama, access'i database niyetine kullanmayın, kullanmak "zorunda" iseniz de, JET degil ACE driver kullanın bari. 

    Not: Önay'ın videolarını izlemenizde fayda var. Seri halinde:

    ADO.Net Uyguama Örneği 01

    23 Nisan 2019 Salı 14:17
    Yanıtlayıcı
  • Projenin deadline'ına daha varsa yada kodu daha güzel bir biçime getirmek adına yada kendinizi geliştirmeniz amaçlı :

    1-O gördüğüm yanılmıyorsam Access onun yerine  MSSQL,MySQL,SQLite,LiteDb vb. kullanın.(veritabanı kullanın)

    2-SQL kodlarında parametre yok doğrudan sql cümlesinin içerisine atama var bu durumda eğer ben ilgili textbox'a bir SQL kodu yazsam çalıştırabilirim.(Güvenlik açığı /SQL injection)

    3-Direkt Butonların arkasına kodlar yazmışsınız yani eğer siz arayüzü değiştirmek durumunda kalırsanız kodlarıda sil baştan yazacaksınız bu büyük külfet.

    4-Bu konuda pek tecrübeli değilim ama belki ado.net ile birlikte Singleton pattern kullanılabilir.

    5-ADO.NET öğrenmek veritabanı mantığını anlamaya çok yardımcı oluyor ancak Entity framework CRUD işlemleri sadece bir iki satır sürüyor.


    NOT:Çetin abi bu defa sen benden hızlı davranmışsın görmedim abi yazdığını :D 
    23 Nisan 2019 Salı 14:23
  • Mehmet,

    Ben bazen 20-30dk once yazılanı gormuyorum :)

    23 Nisan 2019 Salı 15:19
    Yanıtlayıcı
  • Update sorgunuzda hata var. Sorgunun sonundaki "where stokAdi" ile başlayan alanı aşağıdaki şekilde değiştirin.

    where stokAdi='" + bunifuMaterialTextbox1.Text + "'";

    Mustafa Taş

    Parametre kullanilmasini öneririm, parametre kullanilmis olsaydi, bu hata olmayacaktı.
    23 Nisan 2019 Salı 15:20
    Yanıtlayıcı
  • Update sorgunuzda hata var. Sorgunun sonundaki "where stokAdi" ile başlayan alanı aşağıdaki şekilde değiştirin.

    where stokAdi='" + bunifuMaterialTextbox1.Text + "'";

    Mustafa Taş

    Parametre kullanilmasini öneririm, parametre kullanilmis olsaydi, bu hata olmayacaktı.
    Evet hocam haklısınız. Gerekli açıklama ve önerileri siz ve mehmet emin arkadaşımız yazmış. Ben anlık çözüm olması için yardımcı olmuştum sadece :)

    Mustafa Taş

    23 Nisan 2019 Salı 17:59