2011-04-13 11 views
5

मेरे पास कुछ ट्रांजैक्ट-एसक्यूएल है जो इस तरह लॉक करता है, इसे एसक्यूएल कॉमांड ऑब्जेक्ट के माध्यम से निष्पादित किया जा सकता है, या मुझे एसक्यूएल प्रबंधन ऑब्जेक्ट्स सीखने की आवश्यकता है?टी-एसक्यूएल की सीमाएं क्या हैं जिन्हें System.Data.SqlClient.SqlCommand ऑब्जेक्ट द्वारा निष्पादित किया जा सकता है?

BEGIN TRANSACTION 
BEGIN TRY 

    IF NOT EXISTS 
    (
     SELECT * 
     FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_CATALOG = (SELECT DB_NAME()) 
     AND TABLE_NAME = 'SchemaVersion' 
    ) 
     BEGIN 
      Print 'Migrating up...' 

      CREATE TABLE SchemaVersion (
       Id INT IDENTITY(1,1) NOT NULL, 
       Version INT NOT NULL, 
       CONSTRAINT PK_SchemaVersion PRIMARY KEY CLUSTERED (
        Id ASC 
       ) 
      ) 

      INSERT INTO SchemaVersion (Version) VALUES(1) 

      PRINT 'Migrated from 0 to 1' 
     END 
    ELSE IF (SELECT Version FROM SchemaVersion) = 1 
     BEGIN 
      Print 'Migrating down...' 

      DROP TABLE Dia_SchemaVersion 

      PRINT 'Migrated from 1 to 0' 
     END 
    ELSE 
     PRINT 'Not migrating...' 

    COMMIT TRANSACTION; 

END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION 
END CATCH 

उत्तर

3

हाँ, यह SqlCommand द्वारा निष्पादित किया जा सकता है - सबसे आसान तरीका है एक संग्रहीत प्रक्रिया में इस डाल दिया और उस पर अमल करना होगा।

आपके पास क्या समस्याएं हैं?

एसएसएमएस सीखने के लिए - यदि आप SQL सर्वर पर विकसित करते हैं, तो यह एक बुरा विचार नहीं है।

+0

कोई विशेष समस्या नहीं, मैं सिर्फ गलत रास्ते पर जाने से बचना चाहता था। –

3

बस उस संग्रहित प्रक्रिया में लपेटें और इसे SQLLommand की .xecuteNonQuery() विधि का उपयोग करके कॉल करें। आप SqlConnection's InfoMessage event को संभालने के द्वारा अपने .NET कोड से प्रिंट संदेशों को "सुन" सकते हैं। यह कनेक्शन की FireInfoMessageEventOnUserErrors प्रॉपर्टी को सत्य पर सेट करने में भी मदद करता है।

+0

यह InfoMessage के बारे में एक महान युक्ति है, धन्यवाद! बहुत बुरा मैं System.Data.Common कक्षाओं का उपयोग कर रहा हूँ। –

1

आप ADO.NET समझने की जरूरत है और कैसे वस्तुओं काम करते हैं, मुख्य रूप से

  1. कनेक्शन
  2. कमान
  3. लेन-देन
  4. DataReader
  5. डेटासेट
  6. DataDapter

कमांड ऑब्जेक्ट कोई भी SQL (एएनएसआई एसक्यूएल) अनुपालन क्वेरी ले सकता है। आप लेन-देन करने जा रहे हैं, तो मैं सुझाव है कि आप लेन-देन

  1. वाया ADO.NET लेनदेन संभाल ... यहाँ कुछ reading
  2. कॉल एक संग्रहीत प्रक्रिया के बजाय, यह है, आदेश वस्तु से बजाय इसे पास करने का एसक्यूएल के हिस्से के रूप में।
संबंधित मुद्दे