我会发现一个错误:system.invalidoperationException:'该连接已经打开。'

发布于 2025-02-01 15:58:09 字数 15860 浏览 5 评论 0 原文

我认为我的代码没有任何问题,如果我犯了一个错误或关闭连接的错误,我会检查千次。我无法弄清楚,请帮助我:/

如果您发现问题,请让我知道我需要做什么。基本上,我需要做的是当所选列更改datagrid中时,我想达到该行的ID并获取所有数据并将它们放在我的表单上,

谢谢并度过美好的一天

    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;
    
    namespace WindowsFormsApp111
    {
        public partial class Form1 : Form
        {
            OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= hasta_bilgisi.accdb");
            DataTable veritablosu = new DataTable();

            public Form1()
            {
                InitializeComponent();
            }
    
            private void button_cikis_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                veritablosu.Columns.Add("hasta_id");
                veritablosu.Columns.Add("isim");
                veritablosu.Columns.Add("d_tarihi");
                veritablosu.Columns.Add("d_yeri");
                veritablosu.Columns.Add("kan_grubu");
                veritablosu.Columns.Add("cinsiyet");
                veritablosu.Columns.Add("adres");
                veritablosu.Columns.Add("tel");
    
                baglanti.Open();
    
                OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'A%'", baglanti);
                OleDbDataReader okuyucu = komut.ExecuteReader();

                DataRow satır = veritablosu.NewRow();

                while (okuyucu.Read())
                {
                    satır = veritablosu.NewRow();
                    satır[0] = okuyucu[0].ToString();
                    satır[1] = okuyucu[1].ToString();
                    satır[2] = okuyucu[2].ToString();
                    satır[3] = okuyucu[3].ToString();
                    satır[4] = okuyucu[4].ToString();
                    satır[5] = okuyucu[5].ToString();
                    satır[6] = okuyucu[6].ToString();
                    satır[7] = okuyucu[7].ToString();
                    veritablosu.Rows.Add(satır);
                }

                dataGridView1.DataSource = veritablosu;
    
                baglanti.Close();
            }
    
            private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
            {
                veritablosu.Clear();

                if (tabControl1.SelectedIndex == 0) 
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'A%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 1)
                {
                    baglanti.Open();
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'B%' or isim Like 'C%' or isim Like 'D%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();
                    
                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 2)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'E%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 3)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'F%' or isim Like 'G%' or isim Like 'H%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 4)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'I%' or isim Like 'İ%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 5)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'J%' or isim Like 'K%' or isim Like 'L%' or isim Like 'M%' or isim Like 'N%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 6)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'O%' or isim Like 'Ö%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 7)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'P%' or isim Like 'T%' or isim Like 'R%' or isim Like 'S%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 8)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'U%' or isim Like 'Ü%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 9)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'V%' or isim Like 'Y%' or isim Like 'Z%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
            }
    
            private void dataGridView1_SelectionChanged(object sender, EventArgs e)
            {
                if (dataGridView1.CurrentRow != null)
                {
                    int id = Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value);
                    
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where hasta_id=" + id, baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
    
                    while (okuyucu.Read())
                    {
                        textBox_isim.Text = okuyucu[1].ToString();
                        textBox_dogumtarih.Text = okuyucu[2].ToString();
                        comboBox_dogumyer.Text = okuyucu[3].ToString();
                        comboBox_kangrp.Text = okuyucu[4].ToString();
                        if (okuyucu[5].ToString() == "E")
                        {
                            radioButton_erkek.Checked = true;
                        }
                        else 
                        { 
                            radioButton_kadin.Checked = true; 
                        }

                        richTextBox_adres.Text = okuyucu[6].ToString();
                        textBox_tel.Text = okuyucu[7].ToString();
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
            }
        }
    }

I think I don't have any issues with my code and I check thousand times if I am making a mistake opening or closing my connections. I can't figure it out please help me :/

If you find the issue please let me know what I need to do. Basically what I need to do is when the selected column changes in Datagrid I want to reach the id of that row and get all the data and put them on my form

Thanks and have a great day

    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;
    
    namespace WindowsFormsApp111
    {
        public partial class Form1 : Form
        {
            OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= hasta_bilgisi.accdb");
            DataTable veritablosu = new DataTable();

            public Form1()
            {
                InitializeComponent();
            }
    
            private void button_cikis_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                veritablosu.Columns.Add("hasta_id");
                veritablosu.Columns.Add("isim");
                veritablosu.Columns.Add("d_tarihi");
                veritablosu.Columns.Add("d_yeri");
                veritablosu.Columns.Add("kan_grubu");
                veritablosu.Columns.Add("cinsiyet");
                veritablosu.Columns.Add("adres");
                veritablosu.Columns.Add("tel");
    
                baglanti.Open();
    
                OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'A%'", baglanti);
                OleDbDataReader okuyucu = komut.ExecuteReader();

                DataRow satır = veritablosu.NewRow();

                while (okuyucu.Read())
                {
                    satır = veritablosu.NewRow();
                    satır[0] = okuyucu[0].ToString();
                    satır[1] = okuyucu[1].ToString();
                    satır[2] = okuyucu[2].ToString();
                    satır[3] = okuyucu[3].ToString();
                    satır[4] = okuyucu[4].ToString();
                    satır[5] = okuyucu[5].ToString();
                    satır[6] = okuyucu[6].ToString();
                    satır[7] = okuyucu[7].ToString();
                    veritablosu.Rows.Add(satır);
                }

                dataGridView1.DataSource = veritablosu;
    
                baglanti.Close();
            }
    
            private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
            {
                veritablosu.Clear();

                if (tabControl1.SelectedIndex == 0) 
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'A%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 1)
                {
                    baglanti.Open();
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'B%' or isim Like 'C%' or isim Like 'D%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();
                    
                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 2)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'E%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 3)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'F%' or isim Like 'G%' or isim Like 'H%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 4)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'I%' or isim Like 'İ%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 5)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'J%' or isim Like 'K%' or isim Like 'L%' or isim Like 'M%' or isim Like 'N%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 6)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'O%' or isim Like 'Ö%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 7)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'P%' or isim Like 'T%' or isim Like 'R%' or isim Like 'S%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 8)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'U%' or isim Like 'Ü%' ", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
                else if (tabControl1.SelectedIndex == 9)
                {
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where isim Like 'V%' or isim Like 'Y%' or isim Like 'Z%'", baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
                    DataRow satır = veritablosu.NewRow();

                    while (okuyucu.Read())
                    {
                        satır = veritablosu.NewRow();
                        satır[0] = okuyucu[0].ToString();
                        satır[1] = okuyucu[1].ToString();
                        satır[2] = okuyucu[2].ToString();
                        satır[3] = okuyucu[3].ToString();
                        satır[4] = okuyucu[4].ToString();
                        satır[5] = okuyucu[5].ToString();
                        satır[6] = okuyucu[6].ToString();
                        satır[7] = okuyucu[7].ToString();
                        veritablosu.Rows.Add(satır);
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
            }
    
            private void dataGridView1_SelectionChanged(object sender, EventArgs e)
            {
                if (dataGridView1.CurrentRow != null)
                {
                    int id = Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value);
                    
                    baglanti.Open();
    
                    OleDbCommand komut = new OleDbCommand("select * from tbl_Hasta where hasta_id=" + id, baglanti);
                    OleDbDataReader okuyucu = komut.ExecuteReader();
    
                    while (okuyucu.Read())
                    {
                        textBox_isim.Text = okuyucu[1].ToString();
                        textBox_dogumtarih.Text = okuyucu[2].ToString();
                        comboBox_dogumyer.Text = okuyucu[3].ToString();
                        comboBox_kangrp.Text = okuyucu[4].ToString();
                        if (okuyucu[5].ToString() == "E")
                        {
                            radioButton_erkek.Checked = true;
                        }
                        else 
                        { 
                            radioButton_kadin.Checked = true; 
                        }

                        richTextBox_adres.Text = okuyucu[6].ToString();
                        textBox_tel.Text = okuyucu[7].ToString();
                    }

                    dataGridView1.DataSource = veritablosu;
    
                    baglanti.Close();
                }
            }
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最舍不得你 2025-02-08 15:58:09

不要在班级级别保持连接;忘记关闭它或遇到某些例外,这太容易了,这意味着它没有关闭,或者遇到了另一个“已经有一个与...相关的开放式读者……”,如果您要共享连接。

如果必须,请按住连接字符串(但是还有其他东西,例如设置是更好的地方)。每次您想要的时,都会使用使用进行新连接。 open() it,但是您可以使用将其放置将其关闭 - 少的代码行。连接很快就可以创建和相反,与您所相信的命名相反,当您致电/关闭时,它们不会打开和关闭与数据库的TCP(或其他慢速)连接 - 它们只是被租赁并从一个管理并为您回收的游泳池。通过抓住它们,您有可能消除泳池经理所做的所有好处;只需制作一个新的,如果您使用数据表,请在完成时将其扔掉

,使生活变得轻松并使用DataAdapter:

using var da = new OleDbDataAdapter("SELECT SQL here", "conn str here"); 
var dt = new DataTable();
da.Fill(dt);

这就是填充表所需的全部; DataAdapter将建立连接,打开它,运行读者,拉数据,关闭连接

。可以使用的猪)您可以使用强烈键入的数据表 - 请参阅我的答案 a>瞥见(详细介绍它将不超出SO答案的范围)

Do not hold connections at the class level; it's too easy to forget to close it, or encounter some exception that means it's not closed, or run into another "there is already an open reader associated with..." if you're sharing connections.

Hold the connection string if you must (but there are other things e.g. Settings that are better places for that). Make a new connection with using every time you want one. Open() it, but you can leave the Dispose invoked by using to close it - one less line of code to write. Connections are fast to create and contra to what the naming might have you believe, they aren't opening and closing TCP (or some other slow) connection to the database when you call Open/Close - they're just being leased and returned from a pool that manages and recycles them for you. By holding onto them you risk undoing all the good that pool manager does; just make a new one, and throw it away when you're done

If you're using datatables, make your life easy and use a DataAdapter:

using var da = new OleDbDataAdapter("SELECT SQL here", "conn str here"); 
var dt = new DataTable();
da.Fill(dt);

That's all you need to fill the table; dataadapter will make the connection, open it, run the reader, pull the data, close the connection..

And then when you get tired of doing that and want some more help from VS to make life even easier (because base DataTable are largely a pig to work with) you can use strongly typed datatables - see my answer here for a glimpse (going into detail on it would be way out of scope of an SO answer) of what that looks like

注定孤独终老 2025-02-08 15:58:09

问题在于存储连接而不是每个操作的打开/关闭。

Microsoft建议在使用它完成后始终关闭或处理连接,以返回到池的连接。未明确关闭的连接可能不会返回池。例如,一个已超出范围但尚未明确关闭的连接只有在达到最大池大小并且连接仍然有效的情况下才会返回连接池。

下面您可以找到一些示例:

public void CallOleDb(string srcString)
{
    conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcString + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
    using(var connection = new OleDbConnection(conString))
    {
        connection.Open();
        // do your stuff here...
    }
}

也请不要忘记在创建实现Idisposable接口的类实例时使用使用。

The problem is with storing connection instead of open/close for each operation.

Microsoft recommends to always close or dispose of a connection when you are finished using it in order to return the connection to the pool. Connections that are not explicitly closed may not get returned to the pool. For example, a connection that has gone out of scope but that has not been explicitly closed will only be returned to the connection pool if the maximum pool size has been reached and the connection is still valid.
Microsoft article

Below you can find some example:

public void CallOleDb(string srcString)
{
    conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcString + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
    using(var connection = new OleDbConnection(conString))
    {
        connection.Open();
        // do your stuff here...
    }
}

Also please do not forget to use using when creating an instance of classes which implements IDisposable interface.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文