• 19-03-2024, 14:08:45
    #1
    Merhabalar,
    C# form ile bir program geliştiriyorum,
    datareader'i kapatmama rağmen bu sorunu aşamıyorum

    Şimdiden çok teşekkür ederim yardımlarınız için
    Kodları bırakıyorum.
    void qrokumavesonra()
            {
                if (pictureBox1.Image != null)
                {
                    BarcodeReader barcodeReader = new BarcodeReader();
                    Result result = barcodeReader.Decode((Bitmap)pictureBox1.Image);
                    if (result != null)
                    {
                        textBox1.Text = result.Text;
                        kod = result.Text;
                        //sorgu kısmı
                        try
                        {
                            SqlConnectionClass.CheckConnection();
                            string query = "SELECT CalisanID FROM dbo.QRKodlar WHERE QRKod = @qrKod";
                            using (SqlCommand command = new SqlCommand(query, SqlConnectionClass.sqlConnection))
                            {
                                command.Parameters.AddWithValue("@qrKod", kod); // QR kodunuzun değerini içeren değişken
    
                                // Komutu çalıştır ve sonucu al
                                object result2 = command.ExecuteScalar();
    
                                // Sonucun boş olup olmadığını kontrol et
                                if (result2 != null)
                                {
                                    int calisanID = Convert.ToInt32(result2);
                                    label2.Text = ("QR kodunun ilişkilendiği CalisanID: " + calisanID);
    
                                    string timesorgu = "SELECT * FROM GiriscikisKayitlari WHERE CalisanID = @CalisanID";
    
                                    // İkinci SqlCommand nesnesini burada kullanıyoruz
                                    using (SqlCommand timecmd = new SqlCommand(timesorgu, SqlConnectionClass.sqlConnection))
                                    {
                                        timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
    
                                        using (SqlDataReader reader = timecmd.ExecuteReader())
                                        {
                                            if (reader.HasRows)
                                            {
                                                reader.Read();
    
                                                DateTime? girisZamani = reader["GirisZamani"] as DateTime?;
                                                DateTime? cikisZamani = reader["CikisZamani"] as DateTime?;
    
                                                if (girisZamani == null)
                                                {
                                                    query = "UPDATE GiriscikisKayitlari SET GirisZamani = @GirisZamani WHERE CalisanID = @CalisanID";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "Giriş yapıldı.";
                                                }
                                                else if (cikisZamani == null)
                                                {
                                                    query = "UPDATE GiriscikisKayitlari SET CikisZamani = @CikisZamani WHERE CalisanID = @CalisanID";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.AddWithValue("@CikisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "Çıkış Yapıldı";
                                                }
                                                else
                                                {
                                                    query = "INSERT INTO GiriscikisKayitlari (CalisanID, GirisZamani) VALUES (@CalisanID, @GirisZamani)";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.Clear(); // Önceki parametreleri temizle
                                                    timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
                                                    timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "İkisi de dolu, giriş yapıldı";
                                                }
                                                // SqlDataReader'ı kapatın
                                                reader.Close();
                                            }
                                            else
                                            {
                                                query = "INSERT INTO GiriscikisKayitlari (CalisanID, GirisZamani) VALUES (@CalisanID, @GirisZamani)";
                                                timecmd.CommandText = query; // Sorguyu güncelle
                                                timecmd.Parameters.Clear(); // Önceki parametreleri temizle
                                                timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
                                                timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                timecmd.ExecuteNonQuery();
                                                label3.Text = "İlk giriş yapıldı";
                                                // SqlDataReader'ı kapatın
                                                reader.Close();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Hata oluştu: " + ex.Message);
                        }
                    }
                }
            }
  • 19-03-2024, 14:23:08
    #2
    başka bir void içinde dahi çalışan bir datareader var demek ki hocam close ve dispose ederek tekrar deneyin olmuyorsa kodu chatgtp ye atıp ona söyleyin bir de
  • 19-03-2024, 14:23:31
    #3
    engincolak adlı üyeden alıntı: mesajı görüntüle
    Merhabalar,
    C# form ile bir program geliştiriyorum,
    datareader'i kapatmama rağmen bu sorunu aşamıyorum

    Şimdiden çok teşekkür ederim yardımlarınız için
    Kodları bırakıyorum.
    void qrokumavesonra()
            {
                if (pictureBox1.Image != null)
                {
                    BarcodeReader barcodeReader = new BarcodeReader();
                    Result result = barcodeReader.Decode((Bitmap)pictureBox1.Image);
                    if (result != null)
                    {
                        textBox1.Text = result.Text;
                        kod = result.Text;
                        //sorgu kısmı
                        try
                        {
                            SqlConnectionClass.CheckConnection();
                            string query = "SELECT CalisanID FROM dbo.QRKodlar WHERE QRKod = @qrKod";
                            using (SqlCommand command = new SqlCommand(query, SqlConnectionClass.sqlConnection))
                            {
                                command.Parameters.AddWithValue("@qrKod", kod); // QR kodunuzun değerini içeren değişken
    
                                // Komutu çalıştır ve sonucu al
                                object result2 = command.ExecuteScalar();
    
                                // Sonucun boş olup olmadığını kontrol et
                                if (result2 != null)
                                {
                                    int calisanID = Convert.ToInt32(result2);
                                    label2.Text = ("QR kodunun ilişkilendiği CalisanID: " + calisanID);
    
                                    string timesorgu = "SELECT * FROM GiriscikisKayitlari WHERE CalisanID = @CalisanID";
    
                                    // İkinci SqlCommand nesnesini burada kullanıyoruz
                                    using (SqlCommand timecmd = new SqlCommand(timesorgu, SqlConnectionClass.sqlConnection))
                                    {
                                        timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
    
                                        using (SqlDataReader reader = timecmd.ExecuteReader())
                                        {
                                            if (reader.HasRows)
                                            {
                                                reader.Read();
    
                                                DateTime? girisZamani = reader["GirisZamani"] as DateTime?;
                                                DateTime? cikisZamani = reader["CikisZamani"] as DateTime?;
    
                                                if (girisZamani == null)
                                                {
                                                    query = "UPDATE GiriscikisKayitlari SET GirisZamani = @GirisZamani WHERE CalisanID = @CalisanID";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "Giriş yapıldı.";
                                                }
                                                else if (cikisZamani == null)
                                                {
                                                    query = "UPDATE GiriscikisKayitlari SET CikisZamani = @CikisZamani WHERE CalisanID = @CalisanID";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.AddWithValue("@CikisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "Çıkış Yapıldı";
                                                }
                                                else
                                                {
                                                    query = "INSERT INTO GiriscikisKayitlari (CalisanID, GirisZamani) VALUES (@CalisanID, @GirisZamani)";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.Clear(); // Önceki parametreleri temizle
                                                    timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
                                                    timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "İkisi de dolu, giriş yapıldı";
                                                }
                                                // SqlDataReader'ı kapatın
                                                reader.Close();
                                            }
                                            else
                                            {
                                                query = "INSERT INTO GiriscikisKayitlari (CalisanID, GirisZamani) VALUES (@CalisanID, @GirisZamani)";
                                                timecmd.CommandText = query; // Sorguyu güncelle
                                                timecmd.Parameters.Clear(); // Önceki parametreleri temizle
                                                timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
                                                timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                timecmd.ExecuteNonQuery();
                                                label3.Text = "İlk giriş yapıldı";
                                                // SqlDataReader'ı kapatın
                                                reader.Close();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Hata oluştu: " + ex.Message);
                        }
                    }
                }
            }
    If bloklarından kaldırıp aşağıdaki yapıda kullanmayı deneyin.
    using (SqlDataReader reader = timecmd.ExecuteReader())
    {
        .....
        reader.Close();
    }
  • 19-03-2024, 14:29:15
    #4
    RequSoft adlı üyeden alıntı: mesajı görüntüle
    başka bir void içinde dahi çalışan bir datareader var demek ki hocam close ve dispose ederek tekrar deneyin olmuyorsa kodu chatgtp ye atıp ona söyleyin bir de
    Tek DataReader olan metot burası hocam, ChatGPT'de çözemedi.
    Esg adlı üyeden alıntı: mesajı görüntüle
    If bloklarından kaldırıp aşağıdaki yapıda kullanmayı deneyin.
    using (SqlDataReader reader = timecmd.ExecuteReader())
    {
        .....
        reader.Close();
    }
    Teşekkür ederim hocam fakat aynı sorun devam etmekte
  • 19-03-2024, 14:30:04
    #5
    engincolak adlı üyeden alıntı: mesajı görüntüle
    Tek DataReader olan metot burası hocam, ChatGPT'de çözemedi.

    Teşekkür ederim hocam fakat aynı sorun devam etmekte
    try catch kaldırıp hangi satırda patladığını söyler misiniz?
  • 19-03-2024, 14:32:46
    #6
    Acaba visual studioda derlenen kod ile main kod dosyaları farklı olabilir mi hocam ?
  • 19-03-2024, 14:38:06
    #7
    Esg adlı üyeden alıntı: mesajı görüntüle
    try catch kaldırıp hangi satırda patladığını söyler misiniz?
    else
                                            {
                                                query = "INSERT INTO GiriscikisKayitlari (CalisanID, GirisZamani) VALUES (@CalisanID, @GirisZamani)";
                                                timecmd.CommandText = query; // Sorguyu güncelle
                                                timecmd.Parameters.Clear(); // Önceki parametreleri temizle
                                                timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
                                                timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                timecmd.ExecuteNonQuery();  // BURADA PATLIYOR!
                                                label3.Text = "İlk giriş yapıldı";
                                                // SqlDataReader'ı kapatın
                                                reader.Close();
                                            }

    Bu arada Timer ile çalışıyor hocam söylemeyi unutmuşum onunla birlikte de paylaşayım kodları
     private void Form1_Load(object sender, EventArgs e)
            {
                filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                for (int i = 0; i < filterInfoCollection.Count; i++)
                {
                    comboBox1.Items.Add(filterInfoCollection[i].Name);
                }
            }
    
            void qrokumavesonra()
            {
                if (pictureBox1.Image != null)
                {
                    BarcodeReader barcodeReader = new BarcodeReader();
                    Result result = barcodeReader.Decode((Bitmap)pictureBox1.Image);
                    if (result != null)
                    {
                        textBox1.Text = result.Text;
                        kod = result.Text;
                        //sorgu kısmı
                        
                            SqlConnectionClass.CheckConnection();
                            string query = "SELECT CalisanID FROM dbo.QRKodlar WHERE QRKod = @qrKod";
                            using (SqlCommand command = new SqlCommand(query, SqlConnectionClass.sqlConnection))
                            {
                                command.Parameters.AddWithValue("@qrKod", kod); // QR kodunuzun değerini içeren değişken
    
                                // Komutu çalıştır ve sonucu al
                                object result2 = command.ExecuteScalar();
    
                                // Sonucun boş olup olmadığını kontrol et
                                if (result2 != null)
                                {
                                    int calisanID = Convert.ToInt32(result2);
                                    label2.Text = ("QR kodunun ilişkilendiği CalisanID: " + calisanID);
    
                                    string timesorgu = "SELECT * FROM GiriscikisKayitlari WHERE CalisanID = @CalisanID";
    
                                    // İkinci SqlCommand nesnesini burada kullanıyoruz
                                    using (SqlCommand timecmd = new SqlCommand(timesorgu, SqlConnectionClass.sqlConnection))
                                    {
                                        timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
    
                                        using (SqlDataReader reader = timecmd.ExecuteReader())
                                        {
                                            if (reader.HasRows)
                                            {
                                                reader.Read();
    
                                                DateTime? girisZamani = reader["GirisZamani"] as DateTime?;
                                                DateTime? cikisZamani = reader["CikisZamani"] as DateTime?;
    
                                                if (girisZamani == null)
                                                {
                                                    query = "UPDATE GiriscikisKayitlari SET GirisZamani = @GirisZamani WHERE CalisanID = @CalisanID";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "Giriş yapıldı.";
                                                }
                                                else if (cikisZamani == null)
                                                {
                                                    query = "UPDATE GiriscikisKayitlari SET CikisZamani = @CikisZamani WHERE CalisanID = @CalisanID";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.AddWithValue("@CikisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "Çıkış Yapıldı";
                                                }
                                                else
                                                {
                                                    query = "INSERT INTO GiriscikisKayitlari (CalisanID, GirisZamani) VALUES (@CalisanID, @GirisZamani)";
                                                    timecmd.CommandText = query; // Sorguyu güncelle
                                                    timecmd.Parameters.Clear(); // Önceki parametreleri temizle
                                                    timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
                                                    timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                    timecmd.ExecuteNonQuery();
                                                    label3.Text = "İkisi de dolu, giriş yapıldı";
                                                }
                                                // SqlDataReader'ı kapatın
                                                reader.Close();
                                            }
                                            else
                                            {
                                                query = "INSERT INTO GiriscikisKayitlari (CalisanID, GirisZamani) VALUES (@CalisanID, @GirisZamani)";
                                                timecmd.CommandText = query; // Sorguyu güncelle
                                                timecmd.Parameters.Clear(); // Önceki parametreleri temizle
                                                timecmd.Parameters.AddWithValue("@CalisanID", calisanID);
                                                timecmd.Parameters.AddWithValue("@GirisZamani", DateTime.Now);
                                                timecmd.ExecuteNonQuery();
                                                label3.Text = "İlk giriş yapıldı";
                                                // SqlDataReader'ı kapatın
                                                reader.Close();
                                            }
                                        }
                                    }
                                }
                            }
                        
                      
                    }
                }
            }
            private void timer1_Tick(object sender, EventArgs e)
            {
                try
                {
                    timer1.Stop();
                    qrokumavesonra();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata oluştu: " + ex.Message);
                }
                finally 
                {
                    timer1.Start();
                }
            }

    RequSoft adlı üyeden alıntı: mesajı görüntüle
    Acaba visual studioda derlenen kod ile main kod dosyaları farklı olabilir mi hocam ?
    Değişikliklerimi algılıyor hocam yani sanmıyorum
  • 19-03-2024, 15:18:54
    #8
    Esg adlı üyeden alıntı: mesajı görüntüle
    try catch kaldırıp hangi satırda patladığını söyler misiniz?
    RequSoft adlı üyeden alıntı: mesajı görüntüle
    Acaba visual studioda derlenen kod ile main kod dosyaları farklı olabilir mi hocam ?
    Tekrar rahatsız ettim özür dilerim dilerseniz anydesk ile bağlanabilirsiniz.
  • 21-03-2024, 14:38:57
    #9
    Merhabalar öncelikle öğrenemye çalışman güzel birşey yanlız bunu doğru yolla yapıp, başlayıp ilerlemek daha iyi olacaktır.
    Şimdi senin Ado Net ile başladığını var sayıyorum ve o yüzden sana referans olması için eski bir repo paylasacağım. Giriş seviyesinde olduğuna bakma bunu incelemeni istiyorum çünkü burada db joblarını classlarını ve methodlarını n asıl ayırman ve ornagize etmeni öğreneceksin.

    Sorunun cevabı ise breakpoint koyarak bulabilirsin ama zaten kullanımın yanlış olduğundan bu şekilde ilerlerlersen daha iyi olur senin için.

    Sana özellikle DB jobs sayfasından link attım ama sen komple projeye bak.


    Link : Ado.Net Crud Example with Sql Database