C# i SQLite - jak zrobić zapytanie i wstawić do etykiety?

Witajcie. Mam pewien problem. Mam taki kod:

private void polaczBaza_Click(object sender, EventArgs e)
        {
            const string nazwaPlikuBazy = @"baza_testowa.s3db";
            const string sql = "select * from Klient;";
            var conn = new SQLiteConnection("Data Source=" + nazwaPlikuBazy + ";Version=3;");
            try
            {
                conn.Open();
				// Baza do DataGrida -> działa ok
                DataSet ds = new DataSet();
                var da = new SQLiteDataAdapter(sql, conn);           
                da.Fill(ds);
                pokazBaza.DataSource = ds.Tables[0].DefaultView;
                MessageBox.Show("Udało się");
				
				// Imię do Labela -> Nie działa
                string sql2 = "select Klient_imie from Klient WHERE `Klient_ID`='8';";
                var da2 = new SQLiteDataAdapter(sql2, conn);
				imie.Text=Convert.ToString(da2);
               
           

            }
            catch (Exception)
            {
                MessageBox.Show("Nie udało się");
            }
        }

Gdzie chciałbym po załadowaniu bazy wstawić imie klienta do etykiety. Samo wstawienie całej bazy do Data Grid działa. Chciałbym uzyskać rozwiązanie, gdzie pobiorę do konkretnych etykiet dane z bazy poprzez odwołanie przez ID rekordu. Niestety Label etykieta tego nie przyjmuje. Bez konwersji o string woła, ze to ma być string (logiczne), a po konwersji mam Syste.Data.SQLite[]. Jak to obejść?

nie da się obejść, bo robiąc takie zapytanie obierasz NxM komórek danych (gdzie N i M to ilość wierszy i ilość kolumn).

obiekt klasy SQLiteDataAdapter nie jest do tego.

 

lepiej jest użyć SQLiteDataReader, o to przykład:

using (SqliteCommand cmd = new SqliteCommand(stm, con))
            {
                using (SqliteDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read()) 
                    {
                        Console.WriteLine(rdr.GetInt32(0) + " " 
                            + rdr.GetString(1) + " " + rdr.GetInt32(2));
                    }         
                }
            }

różnica jest taka że obiekt ten w pętli zwraca cały wiersz danych, a jego kolejne elementy są komórkami w tym wierszu.

 

Jeżeli chcesz pobrać tylko tę jedną wartość, to lepiej jest użyć cmd.ExecuteScalar i zmienić warunki zapytania SQL

using(SqliteConnection con = new SqliteConnection(cs))
        {
            con.Open();

            string stm = "SELECT imie FROM tabela WHERE warunek";
            using (SqliteCommand cmd = new SqliteCommand(stm, con))
            {
               string imie = cmd.ExecuteScalar();
            }

            con.Close();   
         }

Dzięki wielkie. teraz działa tak jak należy :smiley: