कैसे जांचा जा सकता है कि कोई कॉलम किसी डेटाटेबल में मौजूद है या नहीं


91

मेरे पास एक सीएसवी फ़ाइल की सामग्री के साथ एक डेटेबल उत्पन्न होता है। उपयोगकर्ता को भरने के लिए आवश्यक जानकारी के लिए मैं csv (अब डेटाटेबल में) के कुछ कॉलम को मैप करने के लिए अन्य जानकारी का उपयोग करता हूं।

सबसे अच्छी दुनिया में मानचित्रण संभव होगा। लेकिन यह हकीकत नहीं है ... इसलिए इससे पहले कि मैं इस स्तंभ भी मौजूद है अगर मैं जाँच करने की आवश्यकता होगी कि मैं मूल्य योग्‍य स्तंभ मान को मैप करने की कोशिश करता हूं। अगर मैं यह जांच नहीं करता हूं तो मेरे पास एक ArgumentException है।

बेशक मैं इसे इस तरह से कुछ कोड के साथ देख सकते हैं:

try
{
    //try to map here.
}
catch (ArgumentException)
{ }

लेकिन मेरे पास अब 3 कॉलम हैं नक्शे के लिए और कुछ या सभी मौजूदा / गायब हो सकते हैं

क्या यह जांचने का एक अच्छा तरीका है कि क्या किसी स्तंभ का अस्तित्व है?


क्या आप DataSet/ के साथ काम कर रहे हैं DataTable? यदि हां, तो आप तालिका के सभी स्तंभों की सूची के लिए तालिका के कॉलम संग्रह को देख सकते हैं।
asawyer

हां, @asawyer सीएसवी की सामग्री को डिटैटेबल में डंप किया जाता है। इस दिशा में मेरी नज़र होगी।
रेमी

जवाबों:


192

आप उपयोग कर सकते हैं operator Contains,

private void ContainColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;        
    if (columns.Contains(columnName))
    {
       ....
    }
}

MSDN - DataColumnCollection.Contains ()


क्या आपको यकीन है कि यह लिनक है? मेरे पास अपने कोड और इस काम में लिनेक का कोई संदर्भ नहीं है
Rémi

यह स्तंभों का ऑपरेटर सरल है
अघिलस याकूब

यह एक Linq एक्सटेंशन विधि नहीं है, बल्कि DataColumnCollection प्रकार का सदस्य है, लेकिन यह अच्छी तरह से भी काम करेगा।
asawyer

5
@ अघिलसयकुब यकीन है, मैं उस एक के बारे में भूल गया था। संभवतः इस मामले में भी बेहतर तरीका है। हालांकि एक बात, "आप ऑपरेटर युक्तियों का उपयोग कर सकते हैं" - यह एक ऑपरेटर नहीं है, यह एक सदस्य विधि है।
asawyer


8

एकाधिक स्तंभों के लिए आप नीचे दिए गए एक के समान कोड का उपयोग कर सकते हैं। मैं बस इसके माध्यम से जा रहा था और डेटाटेबल में कई स्तंभों की जांच करने के लिए उत्तर मिला।

 private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames)
    {
        bool iscolumnExist = true;
        try
        {
            if (null != tableNameToCheck && tableNameToCheck.Columns != null)
            {
                foreach (string columnName in columnsNames)
                {
                    if (!tableNameToCheck.Columns.Contains(columnName))
                    {
                        iscolumnExist = false;
                        break;
                    }
                }
            }
            else
            {
                iscolumnExist = false;
            }
        }            
        catch (Exception ex)
        {

        }
        return iscolumnExist;
    }

0

आप Columnsकिसी दिए गए की संपत्ति को देख सकते हैं DataTable, यह तालिका के सभी स्तंभों की एक सूची है।

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

http://msdn.microsoft.com/en-us/library/system.data.datatable.columns.aspx


0
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.