C# Connection Object – Disconnected Layer

C# Connection Object: जैसाकि हमने पिछले Chapters के Discussion से समझा है कि ADO.NET का Connected Layer हमें हमारे Data Provider के Connection, CommandDataReader Objects के माध्‍यम से Underlying Database से Interact करने की सुविधा Provide करता है।

जब हमारा Database Application काफी छोटा होता है अथवा जिसे केवल एक Single User अथवा बहुत कम Users ही Concurrently Use करने वाले होते हैं, तब हम Disconnected Mode के Typical Process को Follow करने के स्थान पर Connected Layer के Objects को ही उपयोग में लेते हुए अपना Application Create करते हैं।

जब हम Connected Layer का प्रयोग करते हुए Underlying Database से Connect होना चाहते हैं और Database की Tables के Records को Data Reader Object के माध्‍यम से Read करना चाहते हैं, तो हमें निम्न Steps को Follow करना होता है:

  • सबसे पहले हमें हमारे Connection Object को Allocate, Configure व Open करना होता है।
  • फिर हमें उस Connection पर SQL Command Execute करने के लिए Command Object को Allocate व Configure करना होता है, जिसके लिए हम Command Object के Constructor में Connection Object को Specify करते हैं अथवा Command Object की Connection Property में Connection Object का Reference Assign करते हैं।
  • फिर हमें पिछले Step में Configure किए गए हमारे Command Object के लिए ExecuteReader() Method को Call करना होता है।
  • तथा अन्त में Data Reader Object में Retrieved सभी Records को Read() Method के माध्‍यम से Process करना होता है।

इन Steps को Use करते हुए यदि हम एक Working Practical Example के माध्‍यम से समझना चाहें, तो हमारा Program कुछ निम्नानुसार हो सकता है:

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

namespace ConnectedLayer
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create and open a connection.
            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = @"
                    Data Source=.\SQLSERVEREXPRESS;
                    Initial Catalog=Northwind;
                    Integrated Security=True";

                cn.Open();

                // Create a SQL command object.
                string strSQL = "Select * From Products";
                SqlCommand myCommand = new SqlCommand(strSQL, cn);

                // Obtain a data reader a la ExecuteReader().
                using (SqlDataReader myDataReader = myCommand.ExecuteReader())
                {
                    // Loop over the results.
                    Console.WriteLine("ProductID \t UnitsInStock \t ProductName ");
                    while (myDataReader.Read())
                    {
                        Console.WriteLine("{0} \t\t {1} \t\t {2}.",
                        myDataReader["ProductID"].ToString(),
                        myDataReader["UnitsInStock"].ToString(),
                        myDataReader["ProductName"].ToString());
                    }
                }
            }
        }
    }
}

Working with C# Connection Object

जब हम Connected Layer को Use करते हुए Database Application Create कर रहे होते हैं, तब सबसे पहले हमें Connection Object के माध्‍यम से Data Provider के साथ एक Session Establish करना होता है। .NET Connection Object में हमें एक Formatted ConnectionString को Specify करना होता है, जो कि Key/Value Pair के रूप में उस Underlying Database से सम्बंधित Comma Separated Configuration Information को Specify करता है, जिससे Connection को Establish करना है, जिसके बारे में हम Connection Object को Discuss करते समय Detail से जान चुके हैं।

जब हम हमारी जरूरत के अनुसार ConnectionString को Define कर लेते हैं, उसके बाद हमें हमारे Connection को Underlying DBMS के साथ Connect करने के लिए Open() Method को Use करना होता है। ConnectionString, Open() व Close() Members के अलावा Connection Object हमें कुछ और Members Provide करता है, जिनका प्रयोग करके हम हमारे Connection व Transaction से सम्बंधित अन्य Settings को Configure कर सकते हैं। DbConnection Class द्वारा Provided इन Members में से कुछ Members निम्नानुसार हैं:

BeginTransaction()

जब हम Transaction के साथ काम करना चाहते हैं, तब Transaction को शु: करने के लिए हमें इस Method को Use करना होता है।

ChangeDatabase()

जब हम किसी Open Connection के साथ Assigned Database को Change करना चाहते हैं, तब हम इस Method को Use करते हैं।

ConnectionTimeout()

ये एक Readonly Property है, जो Connection Establish करने के लिए Use किए जा सकने वाले अधिकतम समय को Represent करता है। Connection Establish करने के लिए हमारा Application इस Property में Specified Time Duration तक Try करता है उसके बाद Error Generate करता है।

GetSchema()

इस Method द्वारा हम किसी DataTable Object को Return कर सकते हैं, जिसमें Data Source से आने वाली Schema Information Contained होती है।

Database

इस Property में Connection Object जिस Underlying Database से Connection Establish कर रहा होता है, उसकी Information होती है। ये एक Read-Only Property है

DataSource

इस Property में Connection Object जिस Underlying Data Provider से Connection Establish कर रहा होता है, उसकी Information होती है। ये एक Read-Only Property है

State

इस Property में Connection Object की Current State की जानकारी होती है, जिसे ConnectionState Enumeration द्वारा Represent किया जाता है।

DbConnection Class की Properties सामान्यत: Read-Only होती हैं और केवल Program के Runtime में उस Program में Use होने वाले Connection की Information या Characteristics को Programmatically Retrieve करने के लिए ही उपयोगी होती हैं। इसलिए यदि हमें हमारे Connection की Settings को Override करना हो, तो हमें हमारे ConnectionString को ही जरूरत के अनुसार Modify करना होता है।

उदाहरण के लिए यदि हमें हमारे Connection Object की Timeout Property को 20 Seconds करना हो, तो हमें हमारे Connection String को निम्न Program में Use किए अनुसार Timeout Setting के साथ Specify करना होता है:

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

namespace ConnectedLayer
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create and open a connection.
            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = @"
                    Data Source=.\SQLSERVEREXPRESS;
                    Initial Catalog=Northwind;
                    Integrated Security=True;
                    Timeout=20";
                cn.Open();

                ShowConnectionStatus(cn);
            }
        }

        static void ShowConnectionStatus(SqlConnection cn)
        {
            // Show various stats about current connection object.
            Console.WriteLine("***** Connection Information *****");
            Console.WriteLine("Database location: {0}", cn.DataSource);
            Console.WriteLine("Database name: {0}", cn.Database);
            Console.WriteLine("Timeout: {0}", cn.ConnectionTimeout);
            Console.WriteLine("Connection state: {0}\n", cn.State.ToString());
        }
    }
}
C# Connection Object - Disconnected Layer - Hindi

जैसाकि इस Program के Output में हम देख सकते हैं, ShowConnectionStatus() Method हमारे Current Connection की Information को Output में Display करने का काम कर रहा है, जबकि Timeout को Set करने के लिए हमने हमारी ConnectionString को निम्नानुसार Modify किया है:

cn.ConnectionString = @”
Data Source=.\SQLSERVEREXPRESS;
Initial Catalog=Northwind;
Integrated Security=True;
Timeout=20″;

इसीलिए Output में हमें Timeout Setting भी Display हो रहा है, जबकि यदि हम इस Connection String से Timeout Setting को Remove कर दें, तो Output में भी हमें ये Setting Display नहीं होगा।

इस तरह से हम समझ सकते हैं कि यदि हमें हमारे Connection से सम्बंधित Information को Access करना हो, तो Program के Runtime में हम इसे केवल Read-Only तरीके से ही Access कर सकते हैं, जबकि Connection Related Settings को Set करने के लिए हमें ConnectionString को ही Program के Design Time में विभिन्न प्रकार के Tokens का प्रयोग करते हुए Set करना होता है।

Connection Object की State Property इसकी एक बहुत ही महत्वपूर्ण Property है, जिस पर हमें विशेष Attention देना जरूरी होता है। हम इस Property को ConnectionState Enumeration में निम्नानुसार Specified किसी भी Value से Set कर सकते हैं:

                cn.ConnectionString = @"
                    Data Source=.\SQLSERVEREXPRESS;
                    Initial Catalog=Northwind;
                    Integrated Security=True;
                    Timeout=20";

हालांकि इस ConnectionState Enum में कई Enum Values को Specify किया गया है, लेकिन Practically केवल ConnectionState.OpenConnectionState.Closed Enumerations को ही Use किया जा सकता है। जबकि इनके अलावा अन्य Enum Values को Future Use के लिए Reserve रखा गया है।

साथ ही हमें हमेंशा अपने Connection को तभी Close करना होता है, जब हमारे Connection Object की State Property का मान ConnectionState.Closed हो, क्योंकि Connection को Close करने का यही सबसे सुरिक्षत समय होता है।

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