2011-08-23 11 views
13

मैं जो दो तालिकाओं T1, T2 से डेटा हो जाता है और खाने हैं एक दृश्य vwGetData है बिना किसी क्वेरी से कॉलम नाम प्राप्त करें:डेटा

t1.Field1 [ALIAS1], t1.Field2, t2.Field3, t2.Field4, t2.Field5 [ALIAS5] 

मैं इनपुट के नीचे प्रदान करेगा

Select * from vwGetData 

मैं चाहता हूँ सी #/SQL में उत्पादन नीचे पाने के लिए

ALIAS1 
Field2 
Field3 
Field4 
ALIAS5 

या

+०१२३५१६४१०६१
ALIAS1, Field2, Field3, Field4, ALIAS5 

मैं इसे सी # और एसक्यूएल का उपयोग करके करना चाहता हूं।

+0

दो तालिकाओं एक-दूसरे से कैसे संबंधित हैं? – Curt

+3

शायद "जहां 1 = 0" जोड़ें और लौटाए गए कॉलम का निरीक्षण करें? –

+0

आपके द्वारा अभी तक लिखा गया कोड पोस्ट करें? और क्या समस्या है? – Waqas

उत्तर

25

पहली बात आप क्या करेंगे यह सुनिश्चित करें कि कोई डेटा नहीं दिया जाता है बनाना है:

SELECT TOP 0 [vwGetData].* FROM [vwGetData] WHERE 1 = 2; 

अब यह सोचते हैं आप जानते हैं कि कैसे एक स्थापित करने के लिए DataReader आप निम्न कार्य करेंगे:

using(var reader = command.ExecuteReader()) 
{ 
    // This will return false - we don't care, we just want to make sure the schema table is there. 
    reader.Read(); 

    var tableSchema = reader.GetSchemaTable(); 

    // Each row in the table schema describes a column 
    foreach (DataRow row in tableSchema.Rows) 
    { 
    Console.WriteLine(row["ColumnName"]); 
    } 
} 

आप SQL Catalog SYS Views पर भी देख सकते हैं। इसलिए जैसे

DataTable dtTable = new DataTable(); 

using (SqlCommand command = new SqlCommand("SELECT * FROM Table", conn)) 
{ 
    SqlDataReader reader = command.ExecuteReader(); 
    dtTable.Load(reader); 
} 

और पहली पंक्ति में स्तंभ को पुनः प्राप्त,:

+0

यह वही है जो मुझे शीर्ष 0 की आवश्यकता है :) – Thakur

+0

आप SELECT TOP 0 [vwGetData] का भी उपयोग कर सकते हैं। * [VwGetData] से जहां 1 = 2; –

+0

अच्छा विचार @ मार्कक्राम धन्यवाद! –

11
SELECT COLUMN_NAME 
FROM 
INFORMATION_SCHEMA.COLUMNS 
WHERE 
TABLE_NAME = 'vwGetData' 
ORDER BY 
ORDINAL_POSITION ASC; 
+0

+1 मुझे उसी वाक्यविन्यास के साथ मारने के लिए +1 –

+0

मैं सी # में शुरुआत कर रहा हूं। मैं इस क्वेरी का उपयोग सी # कोड ब्लॉक में कैसे करूं? –

+0

शायद यह मेरा SQL सर्वर संस्करण (2008) है लेकिन अन्य प्रस्तावित समाधानों में से कोई भी वास्तव में काम नहीं करता है, यहां तक ​​कि स्वीकार किए गए उत्तर भी नहीं। केवल इसने किया, केवल FYI –

2

वहाँ एक good sample here:

using System.Data; 
using System.Data.OleDb; 

OleDbConnection cn = new OleDbConnection(); 
OleDbCommand cmd = new OleDbCommand(); 
DataTable schemaTable; 
OleDbDataReader myReader; 

//Open a connection to the SQL Server Northwind database. 
cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=login; 
         Password=password;Initial Catalog=Northwind"; 
cn.Open(); 

//Retrieve records from the Employees table into a DataReader. 
cmd.Connection = cn; 
cmd.CommandText = "SELECT * FROM Employees"; 
myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo); 

//Retrieve column schema into a DataTable. 
schemaTable = myReader.GetSchemaTable(); 

//For each field in the table... 
foreach (DataRow myField in schemaTable.Rows){ 
    //For each property of the field... 
    foreach (DataColumn myProperty in schemaTable.Columns) { 
    //Display the field name and value. 
    Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString()); 
    } 
    Console.WriteLine(); 

    //Pause. 
    Console.ReadLine(); 
} 

//Always close the DataReader and connection. 
myReader.Close(); 
cn.Close(); 
+1

वे वास्तव में अपने संसाधनों का निपटान अपने नमूना कोड में कर सकते हैं! –

+0

क्या यह सभी डेटा प्राप्त करता है (कर्मचारी * से चुनें) और फिर कॉलम जानकारी वापस कर दें? – Thakur

1

तुम भी डेटा एक DataTable में है, इसलिए जैसे लोड कर सकते हैं

var column = dtTable.Rows[0]["YourColumn"]; 
सभी पंक्तियों के माध्यम से

या पाश और कॉलम का संदर्भ लें, जैसे:

foreach (var c in dtTable.AsEnumerable()) 
{ 
    var column = c["YourColumn"]; 
} 
5

मुझे यह सबसे आसान तरीका मिला है।

using (SqlCommand command = new SqlCommand("SELECT * FROM vwGetData", conn)) 
{ 
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     for (int i = 0; i < reader.FieldCount; i++) 
      Console.Writeline(reader.GetName(i)); 
    } 
} 

यह आपके परिणाम के प्रत्येक पंक्ति के लिए कॉलम नाम मुद्रित करेगा।

+0

ऐसी स्थिति में मेरे लिए एक आकर्षण की तरह काम किया जहां काफी अन्य सभी समाधान विफल रहे - तो बहुत बहुत धन्यवाद! – Rami

0

मुझे निम्न विधि का उपयोग कर सभी कॉलम नाम मिल रहे हैं।

private static List<string> GetColumnNamesFromTableSchema(IDataReader reader) 
    { 
     var schemaTable = reader.GetSchemaTable(); 
     var columnNames = new List<string>(); 
     if (schemaTable != null) 
      columnNames.AddRange(from DataRow row in schemaTable.Rows select row["ColumnName"].ToString()); 
     return columnNames; 
    } 

कंसोल आवेदन संस्करण

DataTable GetSchemaTable द्वारा लौटाए में पंक्तियाँ तालिका स्तंभ बारे में जानकारी शामिल है और मैं onlu स्तंभ नाम चाहते हैं।

using (SqlConnection connection = new SqlConnection("Connection String")) 
       { 
        SqlCommand command = new SqlCommand("select top 10 * from myschema.MyTable", connection); 
        connection.Open(); 
        SqlDataReader reader = command.ExecuteReaderAsync().Result; 
        DataTable schemaTable = reader.GetSchemaTable(); 
        foreach (DataRow row in schemaTable.Rows) 
        { 
         //Console.WriteLine(row["ColumnName"]); 
         foreach (DataColumn column in schemaTable.Columns) 
         {  
          Console.WriteLine(string.Format("{0} = {1}", column.ColumnName, row[column.ColumnName]));         

         } 
         Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<"); 
        } 
} 

https://support.microsoft.com/en-us/kb/310107

+0

क्या आप और विस्तार कर सकते हैं? यहाँ क्या हो रहा है –

0

ओरेकल में sqlserver

SELECT TOP 0 * FROM vwGetData 

में mysql

SELECT * FROM vwGetData LIMIT 0 

में क्वेरी

SELECT * FROM vwGetData WHERE ROWNUM <=0 

फिर क्वेरी उदाहरण 'देववाणी'

OracleDataAdapter adapter = new OracleDataAdapter(query, connection); 
System.Data.DataTable result = new System.Data.DataTable(); 
adapter.Fill(result); 

List<string> columns = new List<string>(); 
foreach(DataColumn item in result.Columns) 
{ 
    columns.Add(item.ColumnName); 
} 
return columns; 
0

के लिए # ग से आप केवल तालिका नाम

2.select तालिका नाम लिखने के सभी स्तंभ सूची

1.In एसक्यूएल क्वेरी संपादक प्राप्त कर सकते हैं पर अमल और Alt + F1

संबंधित मुद्दे