मैं एसक्यूएल सर्वर में उसी अपवाद को फिर से उखाड़ फेंकना चाहता हूं जो अभी-अभी मेरे ब्लॉक में हुआ है। मैं एक ही संदेश फेंकने में सक्षम हूं लेकिन मैं एक ही त्रुटि फेंकना चाहता हूं।
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO Tags.tblDomain (DomainName, SubDomainId, DomainCode, Description)
VALUES(@DomainName, @SubDomainId, @DomainCode, @Description)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
declare @severity int;
declare @state int;
select @severity=error_severity(), @state=error_state();
RAISERROR(@@Error,@ErrorSeverity,@state);
ROLLBACK TRANSACTION
END CATCH
RAISERROR(@@Error, @ErrorSeverity, @state);
यह पंक्ति त्रुटि दिखाएगी, लेकिन मैं ऐसा कुछ कार्यशीलता चाहता हूं। यह त्रुटि संख्या 50000 के साथ त्रुटि उठाती है, लेकिन मैं चाहता हूं कि त्रुटि संख्या को फेंक दिया जाए जो मैं गुजर रहा हूं @@error
,
मैं इस त्रुटि को दृश्यपटल पर नहीं पकड़ना चाहता हूं।
अर्थात
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
मुझे यह कार्यक्षमता चाहिए। जिसका उपयोग करके प्राप्त नहीं किया जा सकता है raiseerror
। मैं अंत में कस्टम त्रुटि संदेश नहीं देना चाहता।
RAISEERROR
जब मैं ErrorNo को कैच में फेंकने के लिए पास करूं, तो उल्लेखित त्रुटि के नीचे लौटना चाहिए
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
लाइन 14 UNIQUE प्रमुख बाधा 'UK_DomainCode' का उल्लंघन। डुप्लिकेट कुंजी को ऑब्जेक्ट 'Tag.tblDomain' में सम्मिलित नहीं किया जा सकता है। बयान समाप्त कर दिया गया है।
संपादित करें:
यदि मैं चाहता हूं कि यदि मैं चाहता हूं कि जमा प्रक्रिया का उपयोग न करने का दोष क्या हो सकता है, तो संग्रहीत कार्यविधि पर विचार करने वाले अपवाद में कई प्रश्न शामिल हैं जिन्हें निष्पादित करने की आवश्यकता है?
raiserror
, जो कि a के बाद c # बाहर निकलने से अलग हैthrow
। इसलिए मैंनेreturn
अंदर से जोड़ाcatch
क्योंकि मैं उस व्यवहार से मेल खाना चाहता था।