Manualne bindowanie listBoxa z procedury składowanej

0

Witam. Zastanawiam się jak manualnie bindować np. ListBoxa wykorzystując procedurę składowaną.
Jeżeli chodzi o pisanie zapytania w kodzie, to umieszczam przykładowy sample poniżej:

  private void Button1_Click(object sender, System.EventArgs e) { 
         cn.Open();   
         cmd.CommandText = strSQL + "'" + TextBox1.Text + "%'";  
         Dr = cmd.ExecuteReader();  
         ListBox1.Items.Clear();   
         ListBox1.BeginUpdate();    
   
         while (Dr.Read()){  
             ListBox1.Items.Add(Dr.GetString(0) + " - " + Dr.GetInt32(1).ToString());  
         }  
   
         ListBox1.EndUpdate();    
   
         Dr.Close();    
   
   }  

Niestety nie mam pojęcia jak zbindować taką kontrolkę wykorzystując procedurę składowaną. Z góry dzięki za pomoc :)

0

Kod od 'bindowania' się nie zmieni. Jedynie zmienią się następujące linie:

cmd.CommandText = strSQL + "'" + TextBox1.Text + "%'";

Procedura jest już na serwerze MSSQL, więc nie potrzebujesz CommandText.

Jako cmd.CommandType wybierasz CommandType.StoredProcedure.

Parametry dodajesz przez cmd.Parameters.AddWithValue(name, value); // pseudokod

That's it.

I podpowiedź do ADO.NET na przyszłość: nigdy nie buduj zapytania w sposób jaki to zrobiłeś - używaj @parametrów, a następnie wstaw ich wartości. Twój kod jest podatny na SQL injection.

0

Dzięki bardzo za pomoc. Mam jeszcze jedno pytanie.
Postanowiłem spróbować zbindować listBoxa w trochę inny sposób, tym razem wykorzystując TableAdpater

 SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
          
            da.Fill(ds, "tytul");
            DataTable dt = ds.Tables["tytul"];
            listBox1.DataSource = dt;
            listBox1.ValueMember = "id_ksiazki";
            listBox1.DisplayMember = "tytul";

gdzie, sql - to treść zapytania.
Chciałem to przerobić też na procedurę składowaną. Zrobiłem tak jak trzeba ale SqlDataAdapter nie przyjmuje w konstruktorze nazwy procedury, tylko gotową treść zapytania. Jak to obejść w tym konkretnym przypadku ?

0

Zobacz jakie konstruktory ma SqlDataAdapter:

SqlDataAdapter()
SqlDataAdapter(SqlCommand)
SqlDataAdapter(String, SqlConnection)
SqlDataAdapter(String, String)

Ale ja bym na twoim miejscu pozostał przy pierwszym wariancie (SqlDataReader). O wiele bardziej prosty, łatwy do manipulacji i nie wymaga użycia skomplikowanego DataSet.

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