2008-10-06 18 views
5

SQLConnection ऑब्जेक्ट को देखते हुए आप एक तालिका के लिए स्कीमा कैसे प्राप्त कर सकते हैं?किसी तालिका के लिए स्कीमा प्राप्त करना

मैं इसे दूसरे दिन कोशिश कर रहा था और मुझे डेटासेट से स्कीमा प्राप्त करने में सक्षम होना प्रतीत होता था जो मुझे एक क्वेरी चलाने से प्राप्त हुआ था, लेकिन कनेक्शन से प्राप्त होने वाली सभी स्कीमा जानकारी से संबंधित होना प्रतीत होता था टेबल पर वास्तविक विवरण उपलब्ध नहीं थे और नहीं।

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

+0

देखें संबंधित: http://stackoverflow.com/

पूरा यहाँ संदर्भ (हालांकि पुराने विचारों अभी भी उपलब्ध हैं यह नये लोगों का प्रयोग उचित है) q/4155993 –

उत्तर

3

मुझे लगता है कि क्वेरी से स्कीमा तक पहुंच (GetSchemaTable के माध्यम से) ऐसा करने का एकमात्र तरीका है। आप एक क्वेरी चला सकते हैं जो कोई पंक्ति नहीं लौटाती है (तालिका से 1 * 2 चुनें) यदि स्कीमा आपकी रुचि रखते हैं।

आपको स्रोत क्वेरी निष्पादित करने के लिए KeyInfo CommandBehaviour का उपयोग करना चाहिए, अन्यथा नहीं लौट आए सभी जानकारी सही

Command.ExecuteReader(CommandBehavior.KeyInfo) 
6

इस कोड को आप क्या चाहते हो जाएगा होने की गारंटी है (जाहिर है तालिका नाम, सर्वर नाम आदि बदलने):

using System; 
using System.Collections.Generic; 
using System.Text; 

using System.Data; 
using System.Data.SqlClient; 
using System.Data.SqlTypes; 

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string query = "SELECT * FROM t where 1=0"; 
      string connectionString = "initial catalog=test;data source=localhost;Trusted_Connection=Yes"; 

      DataTable tblSchema; 

      using (SqlConnection cnn = new SqlConnection(connectionString)) 
      { 
       using (SqlCommand cmd = cnn.CreateCommand()) 
       { 
        cmd.CommandText = query; 
        cmd.CommandType = CommandType.Text; 
        cnn.Open(); 
        using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.KeyInfo)) 
        { 
         tblSchema = rdr.GetSchemaTable(); 
        } 
        cnn.Close(); 
       } 
      } 
      int numColumns = tblSchema.Columns.Count; 
      foreach (DataRow dr in tblSchema.Rows) 
      { 
       Console.WriteLine("{0}: {1}", dr["ColumnName"], dr["DataType"]); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 
0

एसक्यूएल सर्वर - सूची विचारों क्वेरी। .. sysobjects, syscolumns आदि अगर एसक्यूएल 2000 या इससे पहले ... sys.objects, sys.columns आदि यदि SQL 2005 या उच्चतम। http://msdn.microsoft.com/en-us/library/ms189783.aspx

उदाहरण::

select so.name, sc.* 
from sys.objects as so 
inner join sys.columns as sc on sc.object_id = so.object_id 
where so.name='some_table' 
+0

प्रश्नों के लिए हम क्या कर सकते हैं, सिर्फ टेबल नहीं? जैसे। तालिका 1 में शामिल करें तालिका तालिका में शामिल हों ... – CSharper

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