2009-01-19 16 views
6

मैं एक विधि लिखने के लिए सी # का उपयोग कर रहा हूं जो तालिका के बारे में निम्न जानकारी देता है: कॉलम नाम, कॉलम प्रकार, कॉलम आकार, विदेशी कुंजी।ADO.Net: SQL सर्वर तालिकाओं से तालिका परिभाषा प्राप्त करें

क्या कोई मुझे इसे पूरा करने के तरीके पर सही दिशा में इंगित कर सकता है?

उत्तर

4

प्राप्त करने के लिए FK और स्कीमा आप उपयोग करने में सक्षम होना चाहिए:

DA.FillSchema() 

DS.Table("Name").PrimaryKey 

या विधि

कोड नीचे बताया गया स्निपेट from और Another Link

private void LoanSchema() 
    { 

     private List<String> tablesList = new List<String>(); 
     private Dictionary<String, String> columnsDictionary = new Dictionary<String, String>(); 

      string connectionString = "Integrated Security=SSPI;" + 
      "Persist Security Info = False;Initial Catalog=Northwind;" + 
      "Data Source = localhost"; 
      SqlConnection connection = new SqlConnection(); 
      connection.ConnectionString = connectionString; 
      connection.Open(); 

      SqlCommand command = new SqlCommand(); 
      command.Connection = connection; 
      command.CommandText = "exec sp_tables"; 
      command.CommandType = CommandType.Text; 

      SqlDataReader reader = command.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
        tablesList.Add(reader["TABLE_NAME"].ToString()); 
      } 
      reader.Close(); 

      command.CommandText = "exec sp_columns @table_name = '" + 
      tablesList[0] + "'"; 
      command.CommandType = CommandType.Text; 
      reader = command.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
          columnsDictionary.Add(reader["COLUMN_NAME"].ToString(), reader["TYPE_NAME"].ToString()); 
      } 
} 
1

का उपयोग कर बुला sp_fkey आप SqlDataAdapter.FillSchema() विधि का उपयोग कर सकते हैं।

वैकल्पिक रूप से आप SqlDataAdapter.Fill() विधि का उपयोग SqlDataAdapter की MissingSchemaAction प्रॉपर्टी को AddWithKey में सेट करने के बाद कर सकते हैं। लेकिन अगर आप केवल स्कीमा चाहते हैं तो आपको यह सुनिश्चित करना होगा कि आपकी क्वेरी कोई पंक्ति नहीं लौटाती है। यह आपकी क्वेरी में WHERE 1 = 2 जैसे बयान जोड़कर पूरा किया जा सकता है।

8

यह वास्तव में कैसे आप अपने डेटाबेस के साथ संवाद पर निर्भर करता है। यदि आप LinqToSQL या अन्य समान ओआरएम का उपयोग कर रहे हैं तो यह बहुत आसान होगा लेकिन यदि आप इन मानों को एक क्वेरी के माध्यम से प्राप्त करना चाहते हैं तो मैं सुझाव दूंगा कि आप INFORMATION_SCHEMA दृश्यों का उपयोग करें क्योंकि ये तेज़ और क्वेरी के लिए आसान हैं।

उदा।

select * from information_schema.columns where table_name = 'mytable' 
+0

यह महान है रहे हैं। यह मेरे पास 2 पेज क्वेरी की जगह लेता है। – rediVider

1

यदि आप एमएस एसक्यूएल सर्वर का उपयोग कर रहे हैं तो आपको निश्चित रूप से एसएमओ नेमस्पेस (सर्वर प्रबंधन ऑब्जेक्ट्स) पर एक नज़र रखना चाहिए।

जो आप एक डेटाबेस में सभी प्रकार की चीजों के लिए .net जिम्मेदार में उपयोग कर सकते हैं वस्तुओं (सहित, लेकिन टेबल, कॉलम, बाधाओं आदि तक सीमित नहीं)

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