Question Duplicate control in data from excel? Datagridview

ardasipahi01

New member
Joined
Jul 18, 2023
Messages
4
Programming Experience
1-3
Hello;
I pull the data from Excel and save it to the database with the record button.
But if the data from excel is in the residential database, I want it to give a warning.
I was able to do it on the form, but when it came to pulling from excel, I couldn't. Can you help me please. No matter what I do, I get the message I HAVE THE SAME "This data already exists".
When I set the status to false on btnInsertAndShow_Click, it records normally.
I asked Uncle ChatGpt and he gave me an example, but I could not adapt it to the codes.

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 System.Data.SQLite;
using SpreadsheetLight;
using System.IO;
using System.Globalization; //büyük harf keydetmek için gerekli

namespace excel
{
    public partial class odaaktar : Form
    {
        List<Model.oda> excelData = new List<Model.oda>();
        public odaaktar()
        {
            InitializeComponent();
        }


        SQLiteConnection baglanti;


        bool durum;
        void mukerrer()
        {
            baglanti = new SQLiteConnection("Data Source = dbDENEME.db");
            SQLiteCommand kom = new SQLiteCommand("select * from oda where meskenno=@meskenno", baglanti);
            kom.Parameters.AddWithValue("@meskenno", grdMakale.Columns[2].HeaderText);
            baglanti.Open();
            SQLiteDataReader dr = kom.ExecuteReader();

            if (dr.Read())
            {
                durum = false;
            }
            else
            {
                durum = true;
            }
            baglanti.Close();
        }

        public List<Model.oda> MakeleExcelYukle()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Excel Dosyası .xlsx |*.xlsx| Excel Dosyası .xls |*.xls";
            ofd.ShowDialog();
            string file = ofd.FileName;
            using (SLDocument sl = new SLDocument())
            {
                if (string.IsNullOrEmpty(ofd.FileName))
                {
                    MessageBox.Show(this, "DOSYA SEÇMEDİNİZ. İşlem İptal Edildi..", "Sistem Mesajı", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    FileStream fs = new FileStream(file, FileMode.Open);
                    SLDocument sheet = new SLDocument(fs, "Table 1"); // Excelde 'Table 1' yoksa ilk bulduğu tablodan başlar
                    SLWorksheetStatistics stats = sheet.GetWorksheetStatistics();

                    try
                    {
                        // başlıkları atlamak için 2.rowdan başlıyor
                        for (int j = 2; j <= stats.EndRowIndex; j++)
                        {
                            Model.oda mk = new Model.oda();
                            mk.adisoyadi = sheet.GetCellValueAsString(j, 1);
                            mk.meskenno = sheet.GetCellValueAsInt64(j, 2);
                            mk.projeno = sheet.GetCellValueAsInt64(j, 3);
                            mk.sinifi = sheet.GetCellValueAsInt64(j, 4);
                            mk.takisi = sheet.GetCellValueAsString(j, 5);
                            excelData.Add(mk);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

                return excelData;
            }

        }
        public void GridUploadDataGoster(List<Model.oda> makaleData)
        {
            grdMakale.DataSource = makaleData;
        }

        public void EkleVeGoster(List<Model.oda> makaleData)
        {
              foreach (var mk in makaleData)
                {
                    SQLiteHelper.ExecQuery($@"INSERT INTO [oda]
                                            ([adisoyadi]
                                            ,[meskenno]
                                            ,[projeno]
                                            ,[sinifi]
                                            ,[takisi])
                                          VALUES
                                               ({"\"" + mk.adisoyadi.ToUpper(new CultureInfo("tr-TR", false)) + "\""}
                                               ,{ "\"" + mk.meskenno + "\""}
                                               ,{ "\"" + mk.projeno + "\""}
                                               ,{ "\"" + mk.sinifi + "\""}
                                               ,{ "\"" + mk.takisi.ToUpper(new CultureInfo("tr-TR", false)) + "\""});
                                        "); // int big int gibi sayısal değerler tırnak olmadan eklenir.
                }
                grdMakale.DataSource = SQLiteHelper.SelectQuery("select * from oda");
                  
        }

        private void btnGoster_Click(object sender, EventArgs e)
        {
            MessageBox.Show("İşlem, seçilecek dosyanın büyüklüğüne göre uzun sürebilir. Lütfen tamamlanana kadar bekleyin." + "\n" + "\n" + "Örnek EXCEL ŞABLONUNA göre bir dosya seçmeniz gerektiğini unutmayınız.", "Yüklemeden Önce Duyuru..!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            var excelData = MakeleExcelYukle();
            GridUploadDataGoster(excelData);
            grdMakale.Columns[0].Visible = false;
            grdMakale.Columns[0].HeaderText = "ID";
            grdMakale.Columns[1].HeaderText = "ADI SOYADI";
            grdMakale.Columns[2].HeaderText = "MESKEN NO";
            grdMakale.Columns[3].HeaderText = "PROJE NO";
            grdMakale.Columns[4].HeaderText = "SINIFI";
            grdMakale.Columns[5].HeaderText = "TAKISI";
            btnGoster.Enabled = false;
            btnInsertAndShow.Enabled = true;
        }

        private void btnInsertAndShow_Click(object sender, EventArgs e)
        {
            if (durum == true)
            {
                MessageBox.Show("Kaydetme işlemi yüklenecek verinin büyüklüğüne göre uzun sürebilir." + "\n" + "\n" + "Lütfen işlem tamamlandı mesajına kadar bekleyiniz.", "İşlem Sonucu", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                EkleVeGoster(excelData);
                btnInsertAndShow.Enabled = false;
                MessageBox.Show("İŞLEM TAMAMLANDI.", "Excel Aktarma İşlemi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            else
            {
                MessageBox.Show("AYNISINDAN VAR / This data already exists", "Duyuru..!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                //this.Close();
            }
        }   
    }
}

Codes that artificial intelligence gave me. But I couldn't adapt it to my project.

C#:
// DataGridView'deki verileri veritabanına kaydetme işlemi
private void KaydetButton_Click(object sender, EventArgs e)
{
    // Veritabanı bağlantısı ve komut oluşturma
    using (SqlConnection connection = new SqlConnection("veritabanı-bağlantı-dizesi"))
    {
        connection.Open();

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            // DataGridView'deki her bir satır için veri kontrolü
            string veri = row.Cells["KolonAdi"].Value.ToString(); // KolonAdi, DataGridView'deki ilgili kolon adını temsil eder

            // Veritabanında aynı verinin varlığını kontrol etme
            string query = "SELECT COUNT(*) FROM TabloAdi WHERE KolonAdi = @Veri";
            SqlCommand command = new SqlCommand(query, connection);
            command.Parameters.AddWithValue("@Veri", veri);
            int count = (int)command.ExecuteScalar();

            // Eğer veri veritabanında bulunuyorsa uyarı verme
            if (count > 0)
            {
                MessageBox.Show("Bu veri zaten veritabanında mevcut: " + veri);
            }
            else
            {
                // Veriyi veritabanına ekleme işlemi
                query = "INSERT INTO TabloAdi (KolonAdi) VALUES (@Veri)";
                command = new SqlCommand(query, connection);
                command.Parameters.AddWithValue("@Veri", veri);
                command.ExecuteNonQuery();
            }
        }

        connection.Close();
    }
}
 
if the data from excel is in the residential database, I want it to give a warning.

Add a primary key or unique index to the table that is based on the data you consider to be the same (when you say "the data already exists" you must be looking at some one or more columns to assess this- make those column(s) part of a unique index ), then put the INSERT inside a try/catch. When the insert fails because the unique key is violated, show a message that the data already exists.

Eventually you will remove this message because it is very annoying, but it will demonstrate the point. Perhaps instead you will change it for a counter and just show 1 message at the end "inserted 20 records, 532 records already existed"
 
Unlike your Uncle ChatGPT, we are not a code writing service. Show us your attempt to check for duplicates and tell us where you are running into problems.
 
Ask CGPT how to add a primary key to a SQLite table called X, based on a column Y (or columns Y and Z):

1689771690857.png


This is all that is required. Now your code will fail every time it tries to insert an existing record. Handle the failure
 
Thank you for your responses. But I am a student and I learn these things through examples. There is no one around to help me. I'm trying to do something with my own efforts. I know this is not the place to write code, but if you integrate it into the codes I use for me, I will learn by applying it. I'm trying to do something with my own efforts. I just want a warning that this data exists during registration. Thank you even if you don't help. No problem.

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 System.Data.SQLite;
using SpreadsheetLight;
using System.IO;
using System.Globalization; //büyük harf keydetmek için gerekli

namespace excel
{
    public partial class odaaktar : Form
    {
        List<Model.oda> excelData = new List<Model.oda>();
        public odaaktar()
        {
            InitializeComponent();
        }


        SQLiteConnection baglanti;

        public List<Model.oda> MakeleExcelYukle()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Excel Dosyası .xlsx |*.xlsx| Excel Dosyası .xls |*.xls";
            ofd.ShowDialog();
            string file = ofd.FileName;
            using (SLDocument sl = new SLDocument())
            {
                if (string.IsNullOrEmpty(ofd.FileName))
                {
                    MessageBox.Show(this, "DOSYA SEÇMEDİNİZ. İşlem İptal Edildi..", "Sistem Mesajı", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    FileStream fs = new FileStream(file, FileMode.Open);
                    SLDocument sheet = new SLDocument(fs, "Table 1"); // Excelde 'Table 1' yoksa ilk bulduğu tablodan başlar
                    SLWorksheetStatistics stats = sheet.GetWorksheetStatistics();

                    try
                    {
                        // başlıkları atlamak için 2.rowdan başlıyor
                        for (int j = 2; j <= stats.EndRowIndex; j++)
                        {
                            Model.oda mk = new Model.oda();
                            mk.adisoyadi = sheet.GetCellValueAsString(j, 1);
                            mk.meskenno = sheet.GetCellValueAsInt64(j, 2);
                            mk.projeno = sheet.GetCellValueAsInt64(j, 3);
                            mk.sinifi = sheet.GetCellValueAsInt64(j, 4);
                            mk.takisi = sheet.GetCellValueAsString(j, 5);
                            excelData.Add(mk);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

                return excelData;
            }

        }
        public void GridUploadDataGoster(List<Model.oda> makaleData)
        {
            grdMakale.DataSource = makaleData;
        }

        public void EkleVeGoster(List<Model.oda> makaleData)
        {
              foreach (var mk in makaleData)
                {
                    SQLiteHelper.ExecQuery($@"INSERT INTO [oda]
                                            ([adisoyadi]
                                            ,[meskenno]
                                            ,[projeno]
                                            ,[sinifi]
                                            ,[takisi])
                                          VALUES
                                               ({"\"" + mk.adisoyadi.ToUpper(new CultureInfo("tr-TR", false)) + "\""}
                                               ,{ "\"" + mk.meskenno + "\""}
                                               ,{ "\"" + mk.projeno + "\""}
                                               ,{ "\"" + mk.sinifi + "\""}
                                               ,{ "\"" + mk.takisi.ToUpper(new CultureInfo("tr-TR", false)) + "\""});
                                        "); // int big int gibi sayısal değerler tırnak olmadan eklenir.
                }
                grdMakale.DataSource = SQLiteHelper.SelectQuery("select * from oda");
                  
        }

        private void btnGoster_Click(object sender, EventArgs e)
        {
            MessageBox.Show("İşlem, seçilecek dosyanın büyüklüğüne göre uzun sürebilir. Lütfen tamamlanana kadar bekleyin." + "\n" + "\n" + "Örnek EXCEL ŞABLONUNA göre bir dosya seçmeniz gerektiğini unutmayınız.", "Yüklemeden Önce Duyuru..!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            var excelData = MakeleExcelYukle();
            GridUploadDataGoster(excelData);
            grdMakale.Columns[0].Visible = false;
            grdMakale.Columns[0].HeaderText = "ID";
            grdMakale.Columns[1].HeaderText = "ADI SOYADI";
            grdMakale.Columns[2].HeaderText = "MESKEN NO";
            grdMakale.Columns[3].HeaderText = "PROJE NO";
            grdMakale.Columns[4].HeaderText = "SINIFI";
            grdMakale.Columns[5].HeaderText = "TAKISI";
            btnGoster.Enabled = false;
            btnInsertAndShow.Enabled = true;
        }

        private void btnInsertAndShow_Click(object sender, EventArgs e)
        {
            if (durum == true)
            {
                MessageBox.Show("Kaydetme işlemi yüklenecek verinin büyüklüğüne göre uzun sürebilir." + "\n" + "\n" + "Lütfen işlem tamamlandı mesajına kadar bekleyiniz.", "İşlem Sonucu", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                EkleVeGoster(excelData);
                btnInsertAndShow.Enabled = false;
                MessageBox.Show("İŞLEM TAMAMLANDI.", "Excel Aktarma İşlemi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

          
        }   
    }
}
 
Like I say, make the database do this. Set one or more columns in the table to be unique, hen you'll get an exception when you try to insert duplicate data. Than you just out a try/catch around the ExecQuery
 
Back
Top Bottom