En iyi yanıtlayıcılar
Gerekli bir veya daha fazla parametre için girilen değer yok.

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
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- Düzenleyen Mehmet Emin Kaymaz 23 Nisan 2019 Salı 14:28
- Yanıt Olarak Öneren CetinBasozEditor 23 Nisan 2019 Salı 15:19
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 2 Mayıs 2019 Perşembe 09:50
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ş
- Yanıt Olarak Öneren CetinBasozEditor 23 Nisan 2019 Salı 15:20
-
-
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:
- Yanıt Olarak Öneren Mehmet Emin Kaymaz 23 Nisan 2019 Salı 14:25
- Düzenleyen CetinBasozEditor 23 Nisan 2019 Salı 14:28
-
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- Düzenleyen Mehmet Emin Kaymaz 23 Nisan 2019 Salı 14:28
- Yanıt Olarak Öneren CetinBasozEditor 23 Nisan 2019 Salı 15:19
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 2 Mayıs 2019 Perşembe 09:50
-
-
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ş
-
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ı.Mustafa Taş