SqlReader ile Grid doldurmak

Bu makalemde sık sık ihtiyaç duyduğumuz bir kontrolün çalışmasını ele alacağız. Veri tabanına erişerek stored procedure ile veri ceçekeceğiz. Kodun içerisine SQL cümleciklerini yazmaktansa stored procedure kullanmak daha güvenilir ve hızlı bir metodtur. Örneğimizde bir data gride veritabanımızdan okuduğumuz çalışanların listesini aktaracağız. Bunun için Page_Load eventından gridi dolduracağımız PopulateCalisanlarGrid(10);fonksiyonu çağırıyoruz. Buradaki "10" kaç adet verinin geri döneceğini göstermektedir.
protected void Page_Load(object sender, EventArgs e)
{
   if ( !IsPostBack )
   {
      PopulateCalisanlarGrid(10);
   }
}

Şimdide fonksiyonumuzu yazalım. "RowCount" değişkeni öncedende belirttiğim gibi stored proceduren geri döndereceği veriyi beliryecek bir parametredir. Bağlantı cümleciğimiz tanımlıyoruz. Sonrasında SqlConnection ve SqlCommand instance'larını tanımlıyoruz.
private void PopulateCalisanlarGrid(int RowCount)
{
   string connstr = @"Initial Catalog=<databasename>;" +
            @"Data Source=<server name>;" +
            @"User ID=<username>;" +
            @"Password=<password>";
   SqlConnection conn = new SqlConnection(connstr);
   SqlCommand comm = new SqlCommand();

Bu örneğimmizde stored procedure kullanacağımız için "CommandType" özellikle belirtmeliyiz. Command Type default olarak "Text" tanımlıdır. "CommandText" olarak stored prosedürün adını yazıyoruz. Ardından komutumuz ile bağlantımızı ilişkilendiriyoruz.
   comm.CommandType = CommandType.StoredProcedure;
   comm.CommandText = "sp_Get_CalisanlarListesi";
   comm.Connection = conn;

İşte geldik stored procedure parametre eklemeye. Bunun için SqlParameter tanımlayarak ta "SqlCommand.Add(SqlParameter)" tipinde de ekleyebilirdik. Ben kısa olduğunu düşünerek aşağıdaki yöntemi kullandım. Direkt olarak parametreyi constructor'da tanımladım. Bunun için parametrenin adını ve tipini belirtmemiz yeterlidir. Ardından parametrenin değerini atadık.
   comm.Parameters.Add("@RowCount", SqlDbType.Int);
   comm.Parameters["@RowCount"].Value = rc;

Bu örneğimde veriyi "SqlDataReader" ile okuyup kolon tanımlamasını kendi yaptığım bir "DataTable" ekledim. Aşağıda DataTable'ın tanımlanmasını görmektesiniz.
   DataTable dtbData = new DataTable();
   dtbData.Columns.Add("calisanID", typeof(string));
   dtbData.Columns.Add("Adi", typeof(string));
   dtbData.Columns.Add("Soyadi", typeof(string));

Veee geldik son aşamaya. Bağlantımızı açıp komutumuzu çalıştırıyoruz. Readerdan okunan verileri DataTable'ımıza aktarıyoruz. Bu şekilde yapmamın temel sebebi reader'dan veriyi okurken istediğimiz şekilde manüpüle edebiliyor olmamız.
   try
   {
      conn.Open();
      SqlDataReader dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
      while ( dr.Read() )
      {
         DataRow drow = dtbData.NewRow();
         drow["calisanID"]= dr["EmployeeID"].ToString();
         drow["Adi"] =dr["Name"].ToString();
         drow["Soyadi"] = dr["Surname"].ToString();
         dtbData.Rows.Add(drow);
      }    }
   catch ( Exception )
   {
      throw ex;
   }
   finally
   {
      conn.Close();
   }
   grdCalisanListesi.DataSource = dtbData;
   grdCalisanListesi.DataBind();
}

Son olarakta elimizdeki datayı gridimize ekleyerek işlemimizi sonlandırıyoruz.

Yorumlar

Bu blogdaki popüler yayınlar

ORA-06502: PL/SQL: sayısal veya değer hatası: karakter dizesi arabelleği çok küçük hatası ve çözümü

Sık Kullanılan Regular Expression'lar

Açılış Sayfalarını web.config Üzerinden Ayarlama