C# Serverda ki tablolara erişim

Serverimizde ki database isimlerine erişmek ve onları listeleyip üzerinde işlemler yapmak isteyebilirsiniz. Bu durumda aşağıda ki kodu incelemenizde fayda var. Geliştirmek size kalmış.

 


SqlConnection cnn = new SqlConnection("Data Source=***********; User Id=sa; password=*********");
cnn.Open();
DataTable dt = new DataTable();
SqlDataAdapter dr = new SqlDataAdapter("SELECT name FROM sys.databases", cnn);
dr.Fill(dt);

dataGridView3.DataSource = dt;
cnn.Close();
dataGridView3.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

Not: using System.Data ve using System.Data.SqlClient eklemeyi unutmayın….

Yukarıda ki kod sayesinde serverda bulunan bütün database leri isimleri ile listelemiş olduk. Şimdi de seçeceğimiz herhangi bir database in içindeki tabloları listeleyelim. Bunun için aşağıda ki kodu yazmamız gerekir.

private void dataGridView3_CellClick(object sender, DataGridViewCellEventArgs e)
{
SqlConnection cnn = new SqlConnection("Data Source=*****;Initial Catalog=" + dataGridView3.Rows[e.RowIndex].Cells[0].Value.ToString() + "; User Id=sa; password=****"); 
cnn.Open(); DataTable dt = new DataTable(); 
SqlDataAdapter dr = new SqlDataAdapter("use "+ dataGridView3.Rows[e.RowIndex].Cells[0].Value.ToString() + " SELECT name FROM sys.Tables", cnn); 
dr.Fill(dt); dataGridView4.DataSource = dt; 
dataGridView4.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
}

Bu kodda dikkatinizi bir yere çekmek isterim. “dataGridView3.Rows[e.RowIndex].Cells[0].Value.ToString()” kısmını anlamınızı istiyorum.
Ben database isimlerini dataGridView3 nesnesine aktardım ve dataGridView3_CellClick olayına yazdım yukarıda ki kodu. Yani dataGridView3 üzerinde hücrenin herhangi birini tıkladığım an tıklanmış olan hücrede ki database in ismine göre o database in tablolarını dataGridView4 nesnesi içine doldurdum. O yüzden “dataGridView3.Rows[e.RowIndex].Cells[0].Value.ToString()” ile dataGridView3 e tıkladığım hücrenin değerini string olarak elde ederek SqlConnectionString içerisinde Initial Catalog dediğimiz yere database ismini yazmış oldum. Bu sayede dataGridView4 nesneme seçtiğim database in içindeki tablo isimlerini yazdırmış oldum. DataGridView de seçilen hücrenin içeriğine bu şekilde bir erişim olduğu gibi C# DataGridView de seçili olan hücrenin satır-sütun numarasını ve hücre içeriğini getirme” başlıklı yazımda anlattığım gibi de yapılabilir. Tercih size kalmış.

Buraya kadar yapmış olduğumuz işlemlerle serverimizde ki database lere ve database lerin içinde ki tablolara erişim sağlamış olduk. Peki bu tabloların içinde ne var. Onları da görmek ister miyiz? E hadi buyurun görelim.


private void dataGridView4_CellClick(object sender, DataGridViewCellEventArgs e)

{

string a = ""; string b = "";

if (dataGridView4.SelectedCells.Count > 0)

{

int selectedrowindex = dataGridView4.SelectedCells[0].RowIndex;

DataGridViewRow selectedRow = dataGridView4.Rows[selectedrowindex];

a = Convert.ToString(selectedRow.Cells[0].Value);

}

if (dataGridView3.SelectedCells.Count > 0)

{

int selectedrowindex = dataGridView3.SelectedCells[0].RowIndex;

DataGridViewRow selectedRow = dataGridView3.Rows[selectedrowindex];

b = Convert.ToString(selectedRow.Cells[0].Value);

}

SqlConnection cnn = new SqlConnection("Data Source=********;Initial Catalog=" + b + "; User Id=sa; password=*******");

cnn.Open();

DataTable dt = new DataTable();

SqlDataAdapter dr = new SqlDataAdapter(" SELECT * FROM " + a, cnn);

dr.Fill(dt);

dataGridView2.DataSource = dt;

dataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

}

Tablo isimlerini DataGridView4 içine yazdırmıştık. dataGridView4_CellClick olayına yazdığım kod ile dataGridView4 nesnesinde herhangi bir hücre seçildiği an o hücrede ki seçili olan tablo ismine göre dataGridView2 nesnesine o tablonun içeriğini yazdırmış olduk. Burada dikkat edilmesi gereken nokta seçilen tablonun içindeki satır sayısı çok fazla ise dataGridView nesneniz zorlanacak ve projeniz kilitlenecektir. Peki bunun çözümü ne? Bunu da bir başka yazıda ele almak dileğiyle….

Paylaşmayı unutmayın!