C# System.Data.OleDb.OleDbException: 'INSERT INTO deyiminde sözdizimi hatası'

Syammu12

Hectopat
Katılım
15 Haziran 2022
Mesajlar
57
Daha fazla  
Cinsiyet
Erkek
Bir yemek tarifi uygulaması yapmaya çalışıyorum ve sözdizimi hatası alıp duruyorum. 3 kere kontrol ettim ancak sorunu göremedim.

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace projeodevi123
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;" + "Data Source=yemekler.accdb");
        private void button1_Click(object sender, EventArgs e)
        {
            OleDbCommand sorgu = new OleDbCommand();
            baglanti.Open();
            sorgu.Connection = baglanti;
            sorgu.CommandType = CommandType.Text;
            sorgu.CommandText = "INSERT INTO malzemeler(Yufka,Milfoy,Yulaf,Ton Baligi,Kiyma,Pirzola,Biftek,Antrikot,Butu,Baget,Tavuk,Pastirma,Sucuk,Salam,Ciger,Kulbasti,Nugget,Sinitzel,Sosis,Fume,Paca,Kuru Fasulye,Kirmizi Mercimek,Yesil Mercimek,Bezelye,Borulce,Nohut,Pirinc,Bulgur,Barbunya,Bakla,Soya Fasulyesi,Tereyagi,Margarin,Sut,Yumurta,Yogurt,Kasar,Lor,Krem Peynir,Krema,Maya,Kaymak,Bal,Un,Misir Unu,Nisasta,Misir Nisastasi,Ekmek,Makarna,Tel Sehriye,Arpa Sehriye,Eriste,Galeta,Ahtapot,Alabalik,Somon,Cinekop,Cipura,Sardalya,Hamsi,Istavrit,Kalamar,Karides,Levrek,Palamut,Lahana,Havuc,Sogan,Taze Sogan,Patates,Sarimsak,Pirasa,Ispanak,Marul,Nane,Maydanoz,Dereotu,Semizotu,Reyhan,Kereviz,Karnabahar,Enginar,Pancar,Brokoli,Mantar,Turp,Pazi,Roka,Feslegen,Tere,Domates,Salatalik,Biber,Patlican,Limon,Kabak,Cilek,Kayisi,Seftali,Elma,Muz,Armut,Erik,Greyfurt,Hurma,Uzum,Bogurtlen,Incir,Kivi,Mandalina,Portakal,Visne,Kiraz,Nektarin,Mango,Musmula,Kekik,Kisnis,Kimyon,Susam,Corek Otu,Kori,Aci Sos,Tarcin,Vanilin,Kabartma Tozu,Karbonat,Keklik Otu,Zerdecal) values (@Yufka,@Milfoy,@Yulaf,@Ton Baligi,@Kiyma,@Pirzola,@Biftek,@Antrikot,@Butu,@Baget,@Tavuk,@Pastirma,@Sucuk,@Salam,@Ciger,@Kulbasti,@Nugget,@Sinitzel,@Sosis,@Fume,@Paca,@Kuru Fasulye,@Kirmizi Mercimek,@Yesil Mercimek,@Bezelye,@Borulce,@Nohut,@Pirinc,@Bulgur,@Barbunya,@Bakla,@Soya Fasulyesi,@Tereyagi,@Margarin,@Sut,@Yumurta,@Yogurt,@Kasar,@Lor,@Krem Peynir,@Krema,@Maya,@Kaymak,@Bal,@Un,@Misir Unu,@Nisasta,@Misir Nisastasi,@Ekmek,@Makarna,@Tel Sehriye,@Arpa Sehriye,@Eriste,@Galeta,@Ahtapot,@Alabalik,@Somon,@Cinekop,@Cipura,@Sardalya,@Hamsi,@Istavrit,@Kalamar,@Karides,@Levrek,@Palamut,@Lahana,@Havuc,@Sogan,@Taze Sogan,@Patates,@Sarimsak,@Pirasa,@Ispanak,@Marul,@Nane,@Maydanoz,@Dereotu,@Semizotu,@Reyhan,@Kereviz,@Karnabahar,@Enginar,@Pancar,@Brokoli,@Mantar,@Turp,@Pazi,@Roka,@Feslegen,@Tere,@Domates,@Salatalik,@Biber,@Patlican,@Limon,@Kabak,@Cilek,@Kayisi,@Seftali,@Elma,@Muz,@Armut,@Erik,@Greyfurt,@Hurma,@Uzum,@Bogurtlen,@Incir,@Kivi,@Mandalina,@Portakal,@Visne,@Kiraz,@Nektarin,@Mango,@Musmula,@Kekik,@Kisnis,@Kimyon,@Susam,@Corek Otu,@Kori,@Aci Sos,@Tarcin,@Vanilin,@Kabartma Tozu,@Karbonat,@Keklik Otu,@Zerdecal)";
            sorgu.Parameters.AddWithValue("@Kiyma", checkBox1.Checked);
            sorgu.Parameters.AddWithValue("@Pirzola", checkBox2.Checked);
            sorgu.Parameters.AddWithValue("@Biftek", checkBox3.Checked);
            sorgu.Parameters.AddWithValue("@Bonfile", checkBox6.Checked);
            sorgu.Parameters.AddWithValue("@Antrikot", checkBox5.Checked);
            sorgu.Parameters.AddWithValue("@Butu", checkBox16.Checked);
            sorgu.Parameters.AddWithValue("@Baget", checkBox15.Checked);
            sorgu.Parameters.AddWithValue("@Tavuk", checkBox14.Checked);
            sorgu.Parameters.AddWithValue("@Pastirma", checkBox13.Checked);
            sorgu.Parameters.AddWithValue("@Sucuk", checkBox12.Checked);
            sorgu.Parameters.AddWithValue("@Salam", checkBox11.Checked);
            sorgu.Parameters.AddWithValue("@Ciger", checkBox10.Checked);
            sorgu.Parameters.AddWithValue("@Kulbasti", checkBox9.Checked);
            sorgu.Parameters.AddWithValue("@Nugget", checkBox133.Checked);
            sorgu.Parameters.AddWithValue("@Sinitzel", checkBox132.Checked);
            sorgu.Parameters.AddWithValue("@Sosis", checkBox7.Checked);
            sorgu.Parameters.AddWithValue("@Fume", checkBox130.Checked);
            sorgu.Parameters.AddWithValue("@Paca", checkBox129.Checked);
            sorgu.Parameters.AddWithValue("@Kuru Fasulye", checkBox29.Checked);
            sorgu.Parameters.AddWithValue("@Kirmizi Mercimek", checkBox28.Checked);
            sorgu.Parameters.AddWithValue("@Yesil Mercimek", checkBox27.Checked);
            sorgu.Parameters.AddWithValue("@Bezelye", checkBox26.Checked);
            sorgu.Parameters.AddWithValue("@Borulce", checkBox25.Checked);
            sorgu.Parameters.AddWithValue("@Nohut", checkBox24.Checked);
            sorgu.Parameters.AddWithValue("@Pirinc", checkBox23.Checked);
            sorgu.Parameters.AddWithValue("@Bulgur", checkBox22.Checked);
            sorgu.Parameters.AddWithValue("@Barbunya", checkBox21.Checked);
            sorgu.Parameters.AddWithValue("@Bakla", checkBox20.Checked);
            sorgu.Parameters.AddWithValue("@Soya Fasulyesi", checkBox19.Checked);
            sorgu.Parameters.AddWithValue("@Tereyagi", checkBox45.Checked);
            sorgu.Parameters.AddWithValue("@Margarin", checkBox44.Checked);
            sorgu.Parameters.AddWithValue("@Sut", checkBox43.Checked);
            sorgu.Parameters.AddWithValue("@Yumurta", checkBox42.Checked);
            sorgu.Parameters.AddWithValue("@Yogurt", checkBox41.Checked);
            sorgu.Parameters.AddWithValue("@Beyaz Peynir", checkBox40.Checked);
            sorgu.Parameters.AddWithValue("@Kasar", checkBox39.Checked);
            sorgu.Parameters.AddWithValue("@Lor", checkBox38.Checked);
            sorgu.Parameters.AddWithValue("@Krem Peynir", checkBox37.Checked);
            sorgu.Parameters.AddWithValue("@Krema", checkBox36.Checked);
            sorgu.Parameters.AddWithValue("@Maya", checkBox35.Checked);
            sorgu.Parameters.AddWithValue("@Kaymak", checkBox34.Checked);
            sorgu.Parameters.AddWithValue("@Bal", checkBox33.Checked);
            sorgu.Parameters.AddWithValue("@Un", checkBox61.Checked);
            sorgu.Parameters.AddWithValue("@Misir Unu", checkBox60.Checked);
            sorgu.Parameters.AddWithValue("@Nisasta", checkBox59.Checked);
            sorgu.Parameters.AddWithValue("@Misir Nisastasi", checkBox58.Checked);
            sorgu.Parameters.AddWithValue("@Ekmek", checkBox57.Checked);
            sorgu.Parameters.AddWithValue("@Makarna", checkBox56.Checked);
            sorgu.Parameters.AddWithValue("@Tel Sehriye", checkBox55.Checked);
            sorgu.Parameters.AddWithValue("@Arpa Sehriye", checkBox54.Checked);
            sorgu.Parameters.AddWithValue("@Eriste", checkBox53.Checked);
            sorgu.Parameters.AddWithValue("@Galeta", checkBox52.Checked);
            sorgu.Parameters.AddWithValue("@Yufka", checkBox51.Checked);
            sorgu.Parameters.AddWithValue("@Milfoy", checkBox50.Checked);
            sorgu.Parameters.AddWithValue("@Yulaf", checkBox49.Checked);
            sorgu.Parameters.AddWithValue("@Ahtapot", checkBox77.Checked);
            sorgu.Parameters.AddWithValue("@Alabalik", checkBox76.Checked);
            sorgu.Parameters.AddWithValue("@Ton Baligi", checkBox75.Checked);
            sorgu.Parameters.AddWithValue("@Somon", checkBox74.Checked);
            sorgu.Parameters.AddWithValue("@Cinekop", checkBox73.Checked);
            sorgu.Parameters.AddWithValue("@Cipura", checkBox72.Checked);
            sorgu.Parameters.AddWithValue("@Sardalya", checkBox71.Checked);
            sorgu.Parameters.AddWithValue("@Hamsi", checkBox70.Checked);
            sorgu.Parameters.AddWithValue("@Istavrit", checkBox69.Checked);
            sorgu.Parameters.AddWithValue("@Kalamar", checkBox68.Checked);
            sorgu.Parameters.AddWithValue("@Karides", checkBox67.Checked);
            sorgu.Parameters.AddWithValue("@Levrek", checkBox66.Checked);
            sorgu.Parameters.AddWithValue("@Palamut", checkBox65.Checked);
            sorgu.Parameters.AddWithValue("@Lahana", checkBox93.Checked);
            sorgu.Parameters.AddWithValue("@Havuc", checkBox92.Checked);
            sorgu.Parameters.AddWithValue("@Sogan", checkBox91.Checked);
            sorgu.Parameters.AddWithValue("@Taze Sogan", checkBox90.Checked);
            sorgu.Parameters.AddWithValue("@Patates", checkBox89.Checked);
            sorgu.Parameters.AddWithValue("@Sarimsak", checkBox88.Checked);
            sorgu.Parameters.AddWithValue("@Pirasa", checkBox87.Checked);
            sorgu.Parameters.AddWithValue("@Ispanak", checkBox86.Checked);
            sorgu.Parameters.AddWithValue("@Marul", checkBox85.Checked);
            sorgu.Parameters.AddWithValue("@Nane", checkBox84.Checked);
            sorgu.Parameters.AddWithValue("@Maydanoz", checkBox83.Checked);
            sorgu.Parameters.AddWithValue("@Dereotu", checkBox82.Checked);
            sorgu.Parameters.AddWithValue("@Semizotu", checkBox81.Checked);
            sorgu.Parameters.AddWithValue("@Reyhan", checkBox144.Checked);
            sorgu.Parameters.AddWithValue("@Kereviz", checkBox143.Checked);
            sorgu.Parameters.AddWithValue("@Karnabahar", checkBox142.Checked);
            sorgu.Parameters.AddWithValue("@Enginar", checkBox17.Checked);
            sorgu.Parameters.AddWithValue("@Feslegen", checkBox140.Checked);
            sorgu.Parameters.AddWithValue("@Pancar", checkBox139.Checked);
            sorgu.Parameters.AddWithValue("@Brokoli", checkBox138.Checked);
            sorgu.Parameters.AddWithValue("@Mantar", checkBox137.Checked);
            sorgu.Parameters.AddWithValue("@Turp", checkBox136.Checked);
            sorgu.Parameters.AddWithValue("@Pazi", checkBox135.Checked);
            sorgu.Parameters.AddWithValue("@Roka", checkBox134.Checked);
            sorgu.Parameters.AddWithValue("@Tere", checkBox18.Checked);
            sorgu.Parameters.AddWithValue("@Domates", checkBox109.Checked);
            sorgu.Parameters.AddWithValue("@Salatalik", checkBox108.Checked);
            sorgu.Parameters.AddWithValue("@Patlican", checkBox107.Checked);
            sorgu.Parameters.AddWithValue("@Biber", checkBox106.Checked);
            sorgu.Parameters.AddWithValue("@Limon", checkBox105.Checked);
            sorgu.Parameters.AddWithValue("@Kabak", checkBox104.Checked);
            sorgu.Parameters.AddWithValue("@Cilek", checkBox103.Checked);
            sorgu.Parameters.AddWithValue("@Kayisi", checkBox102.Checked);
            sorgu.Parameters.AddWithValue("@Seftali", checkBox101.Checked);
            sorgu.Parameters.AddWithValue("@Elma", checkBox100.Checked);
            sorgu.Parameters.AddWithValue("@Muz", checkBox99.Checked);
            sorgu.Parameters.AddWithValue("@Armut", checkBox98.Checked);
            sorgu.Parameters.AddWithValue("@Erik", checkBox97.Checked);
            sorgu.Parameters.AddWithValue("@Greyfurt", checkBox157.Checked);
            sorgu.Parameters.AddWithValue("@Hurma", checkBox156.Checked);
            sorgu.Parameters.AddWithValue("@Uzum", checkBox155.Checked);
            sorgu.Parameters.AddWithValue("@Bogurtlen", checkBox154.Checked);
            sorgu.Parameters.AddWithValue("@Incir", checkBox153.Checked);
            sorgu.Parameters.AddWithValue("@Kivi", checkBox152.Checked);
            sorgu.Parameters.AddWithValue("@Mandalina", checkBox151.Checked);
            sorgu.Parameters.AddWithValue("@Portakal", checkBox150.Checked);
            sorgu.Parameters.AddWithValue("@Visne", checkBox149.Checked);
            sorgu.Parameters.AddWithValue("@Kiraz", checkBox148.Checked);
            sorgu.Parameters.AddWithValue("@Nektarin", checkBox147.Checked);
            sorgu.Parameters.AddWithValue("@Mango", checkBox146.Checked);
            sorgu.Parameters.AddWithValue("@Musmula", checkBox145.Checked);
            sorgu.Parameters.AddWithValue("@Kekik", checkBox125.Checked);
            sorgu.Parameters.AddWithValue("@Kisnis", checkBox124.Checked);
            sorgu.Parameters.AddWithValue("@Kimyon", checkBox123.Checked);
            sorgu.Parameters.AddWithValue("@Susam", checkBox122.Checked);
            sorgu.Parameters.AddWithValue("@Corek Otu", checkBox121.Checked);
            sorgu.Parameters.AddWithValue("@Kori", checkBox120.Checked);
            sorgu.Parameters.AddWithValue("@Aci Sos", checkBox119.Checked);
            sorgu.Parameters.AddWithValue("@Tarcin", checkBox118.Checked);
            sorgu.Parameters.AddWithValue("@Vanilin", checkBox117.Checked);
            sorgu.Parameters.AddWithValue("@Kabartma Tozu", checkBox116.Checked);
            sorgu.Parameters.AddWithValue("@Karbonat", checkBox115.Checked);
            sorgu.Parameters.AddWithValue("@Keklik Otu", checkBox114.Checked);
            sorgu.Parameters.AddWithValue("@Zerdecal", checkBox113.Checked);
            sorgu.ExecuteNonQuery();
            baglanti.Close();
            MessageBox.Show("Tarif Başarıyla Eklendi", "Ekleme İşlemi");
        }
    }
}

Bu kadar uzun olmasını bende istemiyorum ama çeşitlilik önemli.

sorgu.Parameters.AddWithValue("@x", checkBox113.Checked); bölümünü "@" kullanmadan yazmayı da denedim.

tablo1.PNG tablo2.PNG tablo3.PNG tablo4.PNG tablo5.PNG tablo6.PNG

Hepsi aynı tablo içerisinde.
 
Son düzenleyen: Moderatör:
Niye her yemek bir sütun? :D Özür dileyerek söylüyorum iğrenç bir veri tabanı tasarımı. Amele işi aşırı. Birincisi veri tabanında 4 sütun olsa yeter. ID, Yemek Adı, İçerik/Malzemeler, Tarif. Her bir yeni malzemede yeni sütun mu ekleyeceksin tabloya? Ne gerek var buna? Ek olarak her seferinde bu kadar uzun sorgular mı yazacaksın? Sorgun aşırı aşırı uzun.
 
Öncelikle zaten yeni öğreniyorum. Filtreleme sistemi yapacağım için ayrı sütun oluşturmanın mantıklı olacağını düşündüm. İnternetten araştırma yaptığımda Asp.Net kullananlar görebildim. Bu işi Windows Form üzerinden yapanı bulamadığım için akıl yürüterek yapmaya çalıştım.
 
Ton Baligi gibi boşluk bulunduran kolonlar için [Ton Baligi] formatı ile tekrar dener misiniz.
 

Dosya Ekleri

  • insert-sql-query-with-space-in-columns-name.png
    insert-sql-query-with-space-in-columns-name.png
    12,6 KB · Görüntüleme: 91
Öncelikle zaten yeni öğreniyorum. Filtreleme sistemi yapacağım için ayrı sütun oluşturmanın mantıklı olacağını düşündüm. İnternetten araştırma yaptığımda Asp.Net kullananlar görebildim. Bu işi Windows Form üzerinden yapanı bulamadığım için akıl yürüterek yapmaya çalıştım.
Malzemeler tablosunda malzeme adı id olsa yeter normalde. Malzemeleri böylece filtreleyebilirsin.

Şimdilik var olan koddan devam edelim. Sorguları da @ ile yazmak yerine $ ile formatlamayı dener misin? $"INSERT INTO table(column1, column2) VALUES ({value1}, {value2})" şeklinde yazdığında value1 ve value2 senin C#'ta tanımlanmış değişkenlerin oluyor. Sorgu.addWithValue kullanıyorsun ya. Gerek kalmıyor böylece ona. Yazman gereken örnek sorgu şöyle bir şey olacak; $"INSERT INTO malzemeler(Yufka, Milföy,...) VALUES ({checkBox51.Checked}, {checkBox50.Checked},...)" gibi. Ek olarak Checkbox'lara isim verirsen senin için daha kolay olur bu mevzu.
 
Ton Baligi gibi boşluk bulunduran kolonlar için [Ton Baligi] formatı ile tekrar dener misiniz.
Açıkçası köşeli parantezler işe yaramadı (ya da ben beceremedim) ancak cidden sorun onlardan kaynaklıymış. "Ton Baligi" gibi olanları "TonBaligi" olarak değiştirdim ve sorun çözüldü.
Malzemeler tablosunda malzeme adı id olsa yeter normalde. Malzemeleri böylece filtreleyebilirsin.

Şimdilik var olan koddan devam edelim. Sorguları da @ ile yazmak yerine $ ile formatlamayı dener misin? $"INSERT INTO table(column1, column2) VALUES ({value1}, {value2})" şeklinde yazdığında value1 ve value2 senin C#'ta tanımlanmış değişkenlerin oluyor. Sorgu.addWithValue kullanıyorsun ya. Gerek kalmıyor böylece ona. Yazman gereken örnek sorgu şöyle bir şey olacak; $"INSERT INTO malzemeler(Yufka, Milföy,...) VALUES ({checkBox51.Checked}, {checkBox50.Checked},...)" gibi. Ek olarak Checkbox'lara isim verirsen senin için daha kolay olur bu mevzu.
Bilgilendirme için teşekkürler. Bu uygulama ödevim ve sabaha yetiştirmem gerekiyor. Bahsettiğin şeyler bana daha basit göründü ve deneyeceğim! Bunun yanında... Bu kodları anlatmam gerekiyor. Bunu nasıl tanımlayabilirim?
 
Malzemeler tablosunda malzeme adı id olsa yeter normalde. Malzemeleri böylece filtreleyebilirsin.
Şunada örnek vereyim ki daha sonrasında değiştirmek istersen daha rahat bir şekilde mantık yürütebilesin.

RDB kullanırken tabloları bir birine bağıntılı hale getirebiliyorsun. Tek tabloyla çalışmana gerek yok yani. Birden fazla tablon olabilir. İlk olarak malzemeler tablon olur ve 2 adet sütunu olur. Malzeme adı ve malzeme ID'si. Daha sonrasında bir de tarifler tablon olur. Tarif adı, tarifin içeriğindeki malzemeler ve tarifin kendisi, bir tane de ID koyarsın.

Şimdi gelelim nasıl kullanacağına. Birincisi malzemeler için kullanacağın checkbox static olmak zorunda değil. Bunu söyleyeyim. Static dediğim şey programı yazarken tek tek elle yerleştirdiğin checkboxlar. Neredeyse 150 tane olan checkbox'ın yani. Bir checkBox array'i veya listesi oluşturup bunları listeden döngü yardımıyla forma ekleyebilirsin.

Veri tabanından öncelikle malzemeleri çekeceksin. Her çektiğin malzeme için bir adet checkbox oluşturacaksın. Bunu yapmak oldukça kolay. Aşağıda paylaştığım kod öncelikle listeyi oluşturmak için.
C#:
List<CheckBox> malzemeCheckBoxListesi = new List<CheckBox>();

//döngüden gelenleri eklediğini varsayıyorum; Ben C# kullanırken DataTable
//kullanarak veri tabanından gelen sonucları işliyordum.

foreach(var item in sorgusonuc) {
    CheckBox checkBox = new CheckBox();
    checkBox.Text = item['malzeme_adi'];
    checkBox.AccessibleName = item['id'];
    /*
        Ara bölgede location işlemlerini yaparsın. Mesela bir panele ekleyeceksindir
        buna uygun bir şekilde bir öncekinin altına veya sağına soluna yerleştirmek için
        kod yazarsın bu kısıma işin bittiğinde checkBox'ı listeye ekleyeceğiz.
    */
    malzemeCheckBoxListesi.add(checkBox);
}
Sonrasında tarif ekleneceği zamana gelelim.
C#:
/* Query stringini de bu kısımda oluşturacağız. */

string Query = $"INSERT INTO tarif(malzemeler, ID, tarif_adi, tarif) VALUES(";

foreach(var item in malzemeCheckBoxListesi) {
    if(item.Checked) {
        Query += $"\"{malzemeCheckBox.Text},";
    }
}

Query.Remove(Query.LastIndexOf(","), 1);
Query += $"\", {ID}, \"{tarif_adi}\", \"{tarif}\")";
//eğer kafana göre ID sistemin varsa onu oraya eklersin
//değilse son ID'yi bir kere artırıp oraya eklersin.
//Daha sonra query'i çalıştırırsın. Yukarıdaki diğer kısımları da nereden topluyorsan
//veriyi ona göre eklersin oraya.

Bunun yanında... Bu kodları anlatmam gerekiyor. Bunu nasıl tanımlayabilirim?
AddWithValue kullanıyorsun ya, @Kıyma dediğin yere süslü parantez içinde kıymanın checkbox'ı hangisiyse onun checked değerini yazacaksın. {checkBox1.Checked} yazsan yetecek yani. Ek olarak sorgunun tırnağının başına da dolar işareti ekle.
 

Technopat Haberler

Yeni konular

Geri
Yukarı