2012-09-19 10 views
8

निम्नलिखित उदाहरण लें ...SqlCommand आज (कथन का उपयोग/निपटान मुद्दा)

 Using cn As New SqlConnection(ConnectionString) 
      Try 
       Dim cmd As SqlCommand = New SqlCommand 
       With cmd 
        .Connection = cn 
        .Connection.Open() 
        .CommandText = "dbo.GetCustomerByID" 
        .CommandType = CommandType.StoredProcedure 
        .Parameters.Add("@CustomerID", SqlDbType.Int, 4) 
        .Parameters("@CustomerID").Value = CustomerID 
       End With 

       da = New SqlDataAdapter(cmd) 
       da.Fill(ds, "Customer") 
      Catch ex As Exception 

      End Try 
     End Using 

अपना शोध से है प्रतीत होता है कि यह मूल रूप से ठीक है लेकिन SqlCommand का निपटारा नहीं किया जा रहा है।

प्रश्न -> निम्नलिखित में से कौन सा उदाहरण इस से निपटने का सबसे अच्छा तरीका है?

उदाहरण 2 - निपटान मैन्युअल

 Using cn As New SqlConnection(ConnectionString) 
      Try 
       Dim cmd As SqlCommand = New SqlCommand 
       With cmd 
        .Connection = cn 
        .Connection.Open() 
        .CommandText = "dbo.GetCustomerByID" 
        .CommandType = CommandType.StoredProcedure 
        .Parameters.Add("@CustomerID", SqlDbType.Int, 4) 
        .Parameters("@CustomerID").Value = CustomerID 
       End With 

       da = New SqlDataAdapter(cmd) 
       cmd.Dispose() 
       da.Fill(ds, "Customer") 
      Catch ex As Exception 

      End Try 
     End Using 

उदाहरण 3 - उदाहरण के लिए 3 के रूप में ही है, लेकिन ट्राई/कैच का उपयोग के भीतर है - का उपयोग करते हुए बयान

 Using cn As New SqlConnection(ConnectionString) 
      Try 
       Using cmd As New SqlCommand 
        With cmd 
         .Connection = cn 
         .Connection.Open() 
         .CommandText = "dbo.GetCustomerByID" 
         .CommandType = CommandType.StoredProcedure 
         .Parameters.Add("@CustomerID", SqlDbType.Int, 4) 
         .Parameters("@CustomerID").Value = CustomerID 
        End With 

        da = New SqlDataAdapter(cmd) 
        da.Fill(ds, "Customer") 
       End Using 
      Catch ex As Exception 

      End Try 
     End Using 

उदाहरण 4 के साथ स्वत: निपटान - क्या इससे कोई फर्क पड़ता है?

 Using cn As New SqlConnection(ConnectionString) 
      Using cmd As New SqlCommand 
       Try 
        With cmd 
         .Connection = cn 
         .Connection.Open() 
         .CommandText = "dbo.GetCustomerByID" 
         .CommandType = CommandType.StoredProcedure 
         .Parameters.Add("@CustomerID", SqlDbType.Int, 4) 
         .Parameters("@CustomerID").Value = CustomerID 
        End With 

        da = New SqlDataAdapter(cmd) 
        da.Fill(ds, "Customer") 
       Catch ex As Exception 

       End Try 
      End Using 
     End Using 

उदाहरण 5 - उदाहरण के 4 के रूप में ही है, लेकिन CommandText और cn का उपयोग करते हुए वक्तव्य में निर्दिष्ट कर रहे हैं - क्या लाभ यह है?

 Using cn As New SqlConnection(ConnectionString) 
      Using cmd As New SqlCommand("GetCustomerByID", cn) 
       Try 
        With cmd 
         .Connection.Open() 
         .CommandType = CommandType.StoredProcedure 
         .Parameters.Add("@CustomerID", SqlDbType.Int, 4) 
         .Parameters("@CustomerID").Value = CustomerID 
        End With 

        da = New SqlDataAdapter(cmd) 
        da.Fill(ds, "Customer") 
       Catch ex As Exception 

       End Try 
      End Using 
     End Using 

उदाहरण 6 - उदाहरण 5 जैसा ही है लेकिन कनेक्शन cmd के बजाय सीएन पर खोला गया है। क्या सीएमडी पर कनेक्शन खोलना बेहतर है अगर केवल एक संग्रहित प्रक्रिया को निष्पादित किया जाना है?

 Using cn As New SqlConnection(ConnectionString) 
      cn.Open() 

      Using cmd As New SqlCommand("GetCustomerByID", cn) 
       Try 
        With cmd 
         .Connection = cn 
         .CommandType = CommandType.StoredProcedure 
         .Parameters.Add("@CustomerID", SqlDbType.Int, 4) 
         .Parameters("@CustomerID").Value = CustomerID 
        End With 

        da = New SqlDataAdapter(cmd) 
        da.Fill(ds, "Customer") 
       Catch ex As Exception 

       End Try 
      End Using 
     End Using 
+1

उपयोग कथन सुरक्षित है, लेकिन सभी स्थितियों में सभी अपवादों को अनदेखा करने वाला एक प्रयास/पकड़ निराश होता है। तो आप अपना प्रयास कैसे और कहाँ रखते हैं, इस पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। आपका सवाल क्या हैं? –

+0

यह प्रश्न मुझे codereview.stackexchange.com –

+0

के लिए बेहतर अनुकूल होने के लिए प्रतीत होता है खाली प्रयास/पकड़ सिर्फ एक उदाहरण था, लेकिन इस मामले में यह केवल सुरक्षा के लिए था। प्रक्रिया में बाहरी यह है कि मैं जांचने जा रहा था कि डेटासेट में कोई सारणी है। अगर ऐसा नहीं होता तो मैं उचित तरीके से निपटूंगा। सवाल के बारे में, यह शीर्ष पर था - मैं पूछ रहा था कि स्क्लोकॉमैंड के निपटारे से निपटने का सबसे अच्छा तरीका क्या है। मैं व्यक्तिगत रूप से सोचता हूं कि उदाहरण 5 सही है लेकिन दूसरों से प्रतिक्रिया जानना चाहता था। –

उत्तर

7

DataAdapter.Fill आदेश खुल जाएगा और कनेक्शन ही बंद करते हैं, तो आप cmd.Connection.Open() जरूरत नहीं है। (संदर्भ:। http://msdn.microsoft.com/en-us/library/377a8x4t.aspx में की गयी टिप्पणी अनुभाग)

SqlConnection के लिए Using का उपयोग करते हुए आप के लिए उस पर .Close बुलाने की प्रभाव पड़ता है।

चर cmd कचरा संग्रहण के लिए पात्र हो जाता है एक बार यह क्षेत्र से बाहर है (या उससे पहले अगर नेट निर्धारित करता है इसे फिर से इस्तेमाल किया जा रहा नहीं जा रहा है)।

आपके उदाहरण 2 में, मुझे यकीन नहीं है कि डेटाएडाप्टर ने इसका उपयोग करने से पहले cmd का निपटान करना इतना अच्छा विचार है।

+0

धन्यवाद। मुझे नहीं पता था कि डेटा एडेप्टर के बारे में तदनुसार संशोधित किया जाएगा। तो अगर आइटम कचरा संग्रह के लिए सुन्दर हो जाता है तो क्या आप कह रहे हैं कि उपयोग कथन वास्तव में आवश्यक नहीं है? –

+0

@cw_dev हां। एक चीज जिसने मुझे काट दिया है 'cmd का उपयोग कर ... cmd.Connection = ... cmd.Connection.Open() ... (निष्पादित करें और पढ़ें) ... अंत का उपयोग करें जो बंद नहीं होता cmd के भीतर कनेक्शन। हालांकि, ऐसा नहीं लगता कि आप ऐसा करने जा रहे हैं। SqlConnection पर 'उपयोग' का उपयोग करना इसे पाने के लिए एक सुविधाजनक तरीका है। कनेक्शन() आपके लिए कनेक्शन। –

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