Pobieranie danych z bazy SQL i pasek postępu

0

Cześć wszystkim,
Pisałem niedawno w podobnej sprawie, ale dalej nie mogę sobie poradzić. Tym razem łączę się z bazą danych MS SQL i wyciągam z niej dane do DataGridView. Chcę poinformować użytkownika, że proces trwa więc jak zawsze ideałem wydaje się pasek postępu. Wystarczy żeby działał w trybie Marquee więc zaczynał się animować po naciśnięciu przycisku.
Kombinowałem z await, Run.Task itd., ale za każdym razem co wydaje się logiczne dla mnie pojawiał się błąd typu połączenie nie może być wykonywane w innym wątku.
Czy do obecnego kodu w łatwy sposób można dołożyć progress bar ? bo mam wrażenie że trzeba przebudować cały kod.

		public void Button1Click(object sender, EventArgs e)
		{
button1.BackColor = System.Drawing.Color.Yellow;		
			string danepolaczenia;
			SqlConnection polaczeniezbaza;
   danepolaczenia = @"dane";

   polaczeniezbaza = new SqlConnection(danepolaczenia);
			polaczeniezbaza.Open();
			
			MessageBox.Show ("Otworzyłem połączenie, kliknij OK i poczekaj na wyświetlenie danych !");
			
			SqlCommand komenda; 
			String sql; 
			
			sql = @"dane";
   komenda = new SqlCommand(sql, polaczeniezbaza);
			SqlDataAdapter da = new SqlDataAdapter(komenda);
			DataTable dt = new DataTable ();
			da.Fill(dt); // wypełnienie dt czyli naszej tabeli
			dataGridView1.DataSource = dt;
			
			dataGridView1.Columns[1].Width = 150;
			dataGridView1.Columns[2].Width = 130;
			dataGridView1.Columns[3].Width = 140;
			dataGridView1.Columns[4].Width = 120;
		
			Thread.Sleep(2000);
			komenda.Dispose();
			polaczeniezbaza.Close();
0
private async Task LoadDataAsync()
{
    progressBar.Visible = true; // Wyświetl ProgressBar przed pobraniem danych
    
    // Twórz i konfiguruj SqlCommand do pobierania danych z bazy
    using (SqlConnection connection = new SqlConnection("connectionString"))
    {
        using (SqlCommand command = new SqlCommand("SELECT * FROM YourTable", connection))
        {
            await connection.OpenAsync();
            
            // Wykonaj zapytanie do bazy danych
            SqlDataReader reader = await command.ExecuteReaderAsync();

            // Przetwarzaj odczytane dane i dodawaj je do DataGridView
            while (await reader.ReadAsync())
            {
                // Dodaj dane do DataGridView
                // ...
            }

            reader.Close();
        }
    }

    progressBar.Visible = false; // Schowaj ProgressBar po zakończeniu pobierania danych
}

Tak na szybko można to tak zrobić

0

Nie wiem jak teraz mam dodać dane do DataGridView. Stosuje SQL Adapter na początku SqlDataAdapter da = new SqlDataAdapter(command); i dostaje wyjątek, ze istnieje już skojarzony z tym poleceniem DataReader

0

Bo to nie sensu.wz jedną, atomową operacje, ktlra zabiera czas. Pobranie danych z p9dpieciem do grida.
Jeslinjuz ds chcesz pokazać to jakiś kręciołek albo okienko Ładuję dane. Progres nar nie ma tu sensu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1