কোনও কলাম কীভাবে ডেটাটেবলের মধ্যে রয়েছে তা যাচাই করবেন


94

আমার কাছে সিএসভি ফাইলের সামগ্রী সহ একটি ডেটাবল তৈরি করা হয়েছে। আমি সিএসভির কয়েকটি কলাম মানচিত্র করতে অন্যান্য তথ্য ব্যবহার করি (বর্তমানে ডেটাটেবলের মধ্যে) তথ্যটি ব্যবহারকারীর পূরণ করতে হবে।

সেরা বিশ্বের ম্যাপিং সর্বদা সম্ভব হবে be তবে এটি বাস্তবতা নয় ... সুতরাং আমি ডেটেটেবল কলাম মানচিত্রটি নেওয়ার চেষ্টা করার আগে column কলামটি এমনকি আছে কিনা তা পরীক্ষা করে দেখতে হবে। আমি যদি এই চেকটি না করি তবে আমার কাছে একটি আর্গুমেন্টএক্সসেপশন রয়েছে।

অবশ্যই আমি এই জাতীয় কিছু কোড দিয়ে এটি পরীক্ষা করতে পারি:

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

তবে আমার কাছে এখন পর্যন্ত 3 টি কলাম মানচিত্রের জন্য রয়েছে এবং কিছু বা সমস্ত উপস্থিত থাকতে পারে / নিখোঁজ হতে পারে

ডেটেবলে কলাম বিদ্যমান কিনা তা যাচাই করার জন্য কি কোনও ভাল উপায় আছে?


আপনি কি DataSet/ এর সাথে ডিল করছেন DataTable? যদি তা হয় তবে আপনি টেবিলের সমস্ত কলামের তালিকার জন্য টেবিলের কলাম সংগ্রহটি দেখতে পারেন।
asawyer

হ্যাঁ, @ সাওয়ের সিএসভির সামগ্রীটি একটি ডেটেবলের মধ্যে ফেলে দেওয়া হয়। আমি এই দিকটি দেখুন।
রুমি

উত্তর:


200

আপনি ব্যবহার করতে পারেন operator Contains,

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

এমএসডিএন - ডেটা কলাম ক্লেকশন.সামগ্রী ()


আপনি কি নিশ্চিত যে এই লিনক? আমি কোনো আমার কোডে linq রেফারেন্স এবং এই কাজ হবে না
Rémi

এটি সাধারণ কলামগুলির অপারেটর
আঘিলাস ইয়াকুব

এটি কোনও লিনাক এক্সটেনশন পদ্ধতি নয়, বরং ডেটা কলাম সংগ্রহের ধরণের সদস্য, তবে দুর্দান্তভাবে কাজ করবে।
asawyer

4
@ অগিলাস ইয়াকুব নিশ্চিত, আমি সেটার কথা ভুলে গেছি। সম্ভবত এই ক্ষেত্রে আরও ভাল উপায় যেতে। একটি জিনিস যদিও "আপনি অপারেটর কনটেনস ব্যবহার করতে পারেন" - এটি কোনও অপারেটর নয়, এটি একটি সদস্য পদ্ধতি।
asawyer


8

একাধিক কলামের জন্য আপনি নীচের বর্ণিত একটির মতো কোড ব্যবহার করতে পারেন just

 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.colouts.aspx



0

সূচিপত্রটি ব্যবহার করা আরও সঠিক:

If dt.Columns.IndexOf("ColumnName") = -1 Then
    'Column not exist
End If

যদি কনটেনগুলি ব্যবহার করা হয় তবে এটি কলম্বনাম এবং কলামনাম 2 এর মধ্যে পার্থক্য করতে পারে না।


এতে আপনার বর্ণিত আচরণ থাকে না। এটি স্ট্রিং.কন্টেনসের মতো নয়। এটি আরও বেশি "আমার সংগ্রহে এই নামের সাথে একটি কলাম রয়েছে?" এবং না "আমার সংগ্রহে কী এই নামটি ধারণ করে একটি কলাম রয়েছে?"
রুমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.