Bir projemde sql sorgusunun Stored Procedure, Function veya Table olup olmadığını bilmediğim için direk sorgu sonucunda dönen alan adlarını almam gereken bir ihtiyaç doğdu.
C# ile Sql Sorgunuzdaki Alan Adlarını Alma
Alttaki kod ile sorgu sonucunda dönen alan adları ve değerlerini console ekranına listeyen basit bir uygulama yapmış olacağız. Öncelikle örnek olarak kullanacağımız Veritabanının sql kodunu paylaşayım isterseniz bu paylaştığım veritabanı script’ini kullanabilirsiniz istersenizde varolan bir veritabanınız üzerinde deneyebilirsiniz.
Sql
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE DATABASE TESTDB GO USE TESTDB GO CREATE TABLE USERS( ID INT PRIMARY KEY IDENTITY, NAME VARCHAR(50), SURNAME VARCHAR(50), AGE SMALLINT ) GO INSERT dbo.USERS (NAME, SURNAME, AGE) VALUES ('Murat','Öner', 25) |
1.Örnek
Bu örneğimizde sql sorgusu sonucunda dönen alanları ve o alanlara ait değerleri tüm satır şeklinde console ekranına yazdırıyoruz. Şimdi Console uygulamamıza ait kodlara bir gözatalım.
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using System; using System.Data; using System.Data.SqlClient; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (var con = new SqlConnection("Data Source=MURAT;Initial Catalog=TESTDB;uid=sa;pwd=123")) { using (var da = new SqlDataAdapter("SELECT * FROM USERS", con)) { var dt = new DataTable(); da.Fill(dt); foreach (DataRow row in dt.Rows) { foreach (DataColumn column in dt.Columns) { Console.WriteLine("Column: {0}, Data: {1}", column.ColumnName, row[column]); } } Console.ReadLine(); } } } } } |
SqlConnection sınıfının constructer metoduna tanımlamış olduğum connection string’i kendi db’nize göre düzenlemeyi unutmayınız.
Sonuç
1 2 3 4 | Column: ID, Data: 1 Column: NAME, Data: Murat Column: SURNAME, Data: Öner Column: AGE, Data: 25 |
2.Örnek
Bu örneğimizde ise sadece alan adlarını aldığımız daha kısa bir kod kullanmış olacağız.
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | using System; using System.Data; using System.Data.SqlClient; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (var con = new SqlConnection("Data Source=MURAT;Initial Catalog=TESTDB;uid=sa;pwd=123")) { con.Open(); using (SqlCommand command = new SqlCommand("SELECT * FROM USERS", con)) { SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) Console.WriteLine(reader.GetName(i)); } } con.Close(); } } } } |
SqlConnection sınıfının constructer metoduna tanımlamış olduğum connection string’i kendi db’nize göre düzenlemeyi unutmayınız.
Sonuç
1 2 3 4 | ID NAME SURNAME AGE |
Merhaba
reader.FieldCount bende 1 adet dönüyor okuyorum COLUMNS_NAME diye birşey geliyor sebebi nedir ? (Database dolu normal sql içinde sorguladığım zaman sorun yok.)
Nasıl bir sql sorgusu ile çalıştırıyorsunuz?
Merhabalar ben excelden sql servera veri çekebiliyorum ve bunu datagridde listeleyebiliyorum ancak bana gönderilen excel dosyasındaki sütun adları bazen türkçe bazen ingilizce geliyor bu yüzden program hata veriyor yani türkçe sütun adına göre ayarladığımda gelen excel verisi türkçe ise sıkıntı olmuyor benim yapmak istediğim ise alan adını sorgularken iki başlığa göre yapabilirmiyim örnek:
select [Delivery Date] or [İrsaliye Tarihi] from tablo_adi gibi yapabilirmiyim bu şekilde çalışmadı ama buna benzer bir çözüm önerisi olabilirmi