DataTable.Columns.Add – Working with DataColumn Object

DataColumn Type किसी DataTable के एक Single Column को Represent करता है। इसलिए किसी DataTable को Represent करने के लिए हमें वास्तव में DataColumn Types के एक Set को Specify करना होता है। DataColumns का यही Collective Collection हमारे DataTable को Represent करता है जो कि किसी Table के Schema Information का आधार होता है।

उदाहरण के लिए यदि हम Northwind Database के Products Table को Model करना चाहें, तो हमें कुल 10 DataColumns Create करने पडेंगे क्योंकि हमारे Northwind Database की Products Table में कुल 10 Columns हैं। जब हम हमारे DataTable के सभी DataColumn Objects को Create कर लेते हैं, उसके बाद हमें DataTable Type के Columns Collection Property में इन Create किए गए DataColumns को Add करना होता है।

चूंकि हम किसी Database की किसी Table के विभिन्न Columns पर विभिन्न प्रकार के Constraints जैसे कि Primary Key, Default Value आदि को Assign कर सकते हैं। ठीक इसी Concept के आधार पर हम हमारे Application में DataColumn Object के साथ भी विभिन्न प्रकार के Constraints Set कर सकते हैं। इसीलिए हर DataColumn Object को हमें किसी न किसी Underlying Data Type के साथ Map करना होता है।

उदाहरण के लिए हमारे Products Table के Schema में ProductID Column एक Integer Type की Value Hold करता है, जबकि ProductName नाम का Column एक Array of Characters Store करता है।

DataColumn Class में भी बहुत सारी Properties हैं, जो हमें किसी DataTable के लिए Create किए जाने वाले Column की विभिन्न प्रकार की Properties को Set करने की सुविधा Provide करता है। DataColumn द्वारा Provide की जाने वाली कुछ Core Properties का Description निम्नानुसार है:

AllowDBNull Property

इस Property का Default मान true होता है। जबकि ये Property इस बात को Indicate करता है कि हम Create होने वाले Column में null Values Store कर सकते हैं या नहीं।

AutoIncrement Property, AutoIncrementSeed Property, AutoIncrementStep Property

इन तीनों Properties का प्रयोग करके हम Create होने वाले Column के Auto Increment Behavior को Configure करते हैं। ये Properties उस स्थिति में उपयोगी साबित होती हैं, जब हम किसी DataColumn जैसे कि Primary Key Column में Unique Values को ही Insert करना चाहते हैं। Default रूप से DataColumn Object AutoIncrement Behavior को Support नहीं करता।

Caption Property

इस Property का प्रयोग करके हम Create होने वाले Column के साथ दिखाई देने वाले Caption को Set या Get कर सकते हैं। इसका प्रयोग करके हम हमारे Database Column Name Literal के User Friendly Version को Define कर सकते हैं।

ColumnMapping Property

इस Property का प्रयोग करके हम इस बात को Determine करते हैं कि DataSet Object को DataSet.WriteXml() Method का प्रयोग करते हुए एक XML Document के रूप में Save करने पर DataColumn Object किस प्रकार से Represent होगा। इस Property के माध्‍यम से हम इस बात को Specify कर सकते हैं कि DataColumn को XML Element, XML Attribute, Simple Text Context या Ignored में से किस Format में Write करना है।

ColumnName Property

इस Property का प्रयोग करके हम Columns Collection में Column के नाम को Get या Set कर सकते हैं। यानी इस बात को त; कर सकते हैं कि हमारे Column का नाम DataTable में Internally किस तरह से Represent होगा। यदि हम इस Property को Explicitly Set नहीं करते, तो Default रूप से हर Column को Column1, Column2, Column3 आदि नामों से Represent किया जाता है।

DataType Property

इस Property का प्रयोग करके हम इस बात को Determine करते हैं कि Create होने वाले DataTable के Column में किस प्रकार का मान Store होगा।

DefaultValue Property

इस Property का प्रयोग करके हम इस बात को Determine करते हैं कि Create होने वाले DataTable के Column में नया Row Insert करते समय Default रूप से क्या मान Assigned रहेगा।

Expression Property

इस Property का प्रयोग करके हम Rows को Filter करने, Column की Value को Calculate करने अथवा Aggregate Column Create करने के लिए Expressions को Get/Set कर सकते हैं।

Ordinal Property

इस Property का प्रयोग करके हम DataTable द्वारा Maintain की जाने वाले Columns Collection से Column की Numerical Position को Get कर सकते हैं।

ReadOnly Property

इस Property का प्रयोग करके हम इस बात का पता लगा सकते हैं कि जब एक बार किसी Row को Table में Add कर दिया जाता है, तब Column का मान Read-Only होता है या नहीं। Default रूप से इसका मान false होता है।

Table Property

इस Property का प्रयोग करके हम उस DataTable को Get कर सकते हैं, जिसमें DataColumn Contained होता है।

Unique Property

इस Property का प्रयोग  करके हम उस DataTable के किसी Column को Unique Values Store करने के लिए Get/Set कर सकते हैं। जब हम किसी DataColumn को Primary Key Constraint Set करते हैं, तब हमें उस Column की Unique Property को true Set करना जरूरी होता है क्योंकि Primary Key हमेंशा Unique Values ही Store करता है।

मानलो हम हमारे पिछले Code Segment को ही आगे बढाना चाहते हैं, जहां हमने DataSet Object Create किया था और अब हम उस DataSet Object में अपनी Products Table को DataTable Object के रूप में Model करना चाहते हैं।

चूंकि हमारी Products Table में ProductID नाम का Column एक Primary Key Column है, इसलिए सबसे पहले हमें एक ऐसा Column Create करना होगा, जो Read-Only, Unique व Not-Null हो और इन तीन Characteristics वाले DataColumn को Create करने के लिए हमें DataColumn Object की ReadOnly, Unique AllowDBNull Properties को Set करना होगा। इन जरूरतों को पूरा करने के लिए हम निम्नानुसार एक FillDataSet() नाम का Method Create कर सकते हैं, जिसके माध्‍यम से हम हमारी Products Table के सभी Columns को Map करने के लिए DataColumn Objects Create रहे हैं:

        static void FillDataSet(DataSet ds)
        {
            // Create data columns that map to the "real" columns in the 
            // Products table of the Northwind database.
            DataColumn pProductID = new DataColumn("ProductID", typeof(int));
            pProductID.Caption = "Product ID";
            pProductID.ReadOnly = true;
            pProductID.AllowDBNull = false;
            pProductID.Unique = true;

            DataColumn pProductName = new DataColumn("ProductName", typeof(string));
            pProductName.Caption = "Product Name"; 
            
            DataColumn pSupplierID = new DataColumn("SupplierID", typeof(int));
            pSupplierID.Caption = "Supplier ID";

            DataColumn pCategoryID = new DataColumn("CategoryID", typeof(int));
            pCategoryID.Caption = "Category ID";

            DataColumn pQuantityPerUnit = new DataColumn("QuantityPerUnit", typeof(int));
            pQuantityPerUnit.Caption = "Quantity/Unit";

            DataColumn pUnitPrice = new DataColumn("UnitPrice", typeof(float));
            pUnitPrice.Caption = "Unit Price";

            DataColumn pUnitsInStock = new DataColumn("UnitsInStock", typeof(int));
            pUnitPrice.Caption = "Units in Stock";

            DataColumn pUnitsOnOrder = new DataColumn("UnitsOnOrder", typeof(int));
            pUnitsOnOrder.Caption = "Ordered Units";

            DataColumn pReorderLevel = new DataColumn("ReorderLevel", typeof(int));
            pReorderLevel.Caption = "Reorder Level";

            DataColumn pDiscontinued = new DataColumn("Discontinued", typeof(string));
        }

इस Method में सबसे पहले हमने अपने pProductID Column के साथ Caption Property को Set किया है। ये Property इसलिए उपयोगी होती है क्योंकि ये Property हमें Display Purpose के लिए एक String Define करने की सुविधा Provide कर रहा है, जो कि Underlying Database की Table Column Name से अलग है। जबकि ADO.NET 2.0 में इसी जरूरत को पूरा करने के लिए हमें TableMapping Collection को Define करना जरूरी होता था।

उदाहरण के लिए यदि किसी Table में किसी Column का नाम pub_id हो, तो Create होने वाली DataTable में भी Column का नाम pub_id ही होता है। लेकिन Caption Property को Specify करके हम इस pub_id के स्थान पर Create होने वाले DataTable Object के Column Name को “Product ID” Set कर सकते हैं। इसी जरूरत को पूरा करने के लिए हमने उपरोक्त Code में “Discontinued” को छोडकर अन्य सभी Column Names का Caption Set किया है।

चूंकि सामान्यत: सभी DBMS Software में Table के हर Row को Uniquely Identify करने के लिए एक Primary Key Column Create किया जाता है, जिसका मान Automatically Increment होता है, ताकि किसी प्रकार की Repeat Value Insert करने से सम्बंधित गलती की सम्भावना हो।

इस जरूरत को पूरा करने के लिए हम हमारे जिस DataColumn Object को Primary Key की तरह Treat करना चाहते हैं, उसकी AutoIncrement Property को Set कर सकते हैं, ताकि हर नया Record Insert होने के साथ ही उसकी Primary Key भी Automatically Generate होकर Fill हो जाए।

चूंकि AutoIncrement Property हमेंशा AutoIncrementSeed व AutoIncrementStep Property के साथ ही Set किया जाना चाहिए, इसलिए यदि हम हमारे Products DataTable के Primary Key Column को AutoIncrement Set करना चाहें, तो अपने पिछले Code में Specified ProductID Column Object को निम्नानुसार Modify कर सकते हैं:

pProductID.AutoIncrement = true;
pProductID.AutoIncrementSeed = 0;
pProductID.AutoIncrementStep = 1;

इन तीन Statements द्वारा हम ये त; कर रहे हैं कि हमारी Products नाम की DataTable का ProductID Column एक ऐसा Column है, जिसमें Automatically एक नया Numerical Value Set होता रहेगा, जिसकी शुरूआत 0 से होगी और हर अगली Value 1 के क्रम में बढेगी। परिणामस्वरूप Create होने वाले हर Row के इस pProductID Column का मान क्रमश 0, 1, 2, 3, 4, 5, … होगा।

जब हम हमारे DataTable Object के लिए जरूरी सभी DataColumns Create कर लेते हैं, उसके बाद हमें हमारे सभी DataColumns को DataTable Object से Add करना होता है। चूंकि हम जितने भी DataColumn Objects Create करते हैं, वे सभी Stand-Alone Entity होते हैं, इसलिए इन सभी एक एक Single Unit के रूप में Combined Form में Setup करने के लिए हम एक नया DataTable Object Create करते हैं और इस DataTable Object के Columns Property में इन सभी DataColumns को Add कर देते हैं, जो कि एक Columns Collection होता है। ये काम हम कुछ निम्नानुसार तरीके से कर सकते हैं:

// Now add DataColumns to a DataTable.
DataTable ProductsTable = new DataTable("Products");
ProductsTable.Columns.AddRange(new DataColumn[] {
	pProductID, pProductName, pSupplierID, pCategoryID, pQuantityPerUnit, 
	pUnitPrice, pUnitsInStock, pUnitsOnOrder, pReorderLevel, pDiscontinued 
});

जब हम इस तरह से DataTable Object की Columns Property में सभी DataColumns को Add करते हैं, तो ये सभी Columns मिलकर एक Group के रूप में हमारे Products Table के In-Memory Schema को Represent करते हैं।

हालांकि अभी भी हमारे DataTable में कोई Data नहीं है न ही हमारा DataTable Object अभी तक हमारे DataSet Object के Table Collection द्वारा Maintained है। इसलिए हमारी इस DataTable में Data को Insert करने के लिए अब हमें DataRow Class को Use करना होता है। जहां हर DataRow Object हमारे DataTable Object के एक Row या Record को Represent करता है।

System.Data.DataSet - Working with DataSet Object
C# DataTable Add Row - Working with DataRow Object

ADO.NET with C# in Hindi - BccFalna.com: TechTalks in Hindi ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

ADO.NET with C# in Hindi | Page:501 | Format: PDF

BUY NOW GET DEMO REVIEWS