2012-05-01 15 views
5

मैंने संग्रहीत प्रक्रिया चुड़ैल कभी-कभी RAISERROR() लिखा था। मैं की तरह इकाई ढांचे के माध्यम से यह निष्पादित करें:इकाई ढांचे में डेटाबेस त्रुटि प्रबंधन

using(MyModelEntities conn = new MyModelEntities()) { 
    conn.MyStoredProcedure(input_p, output_p); 
} 

संग्रहित प्रक्रिया:

create procedure dbo.MyStoredProcedure(
    @input nvarchar(255), 
    @output int out 
) 
as 
begin 
    ... 
     RAISERROR (N'My Exception....', 10, 1); 
    ... 
end 
go 

वहाँ त्रुटि के बारे में जानकारी पाने के लिए किसी भी अवसर है?

उत्तर

2

क्या इसे केवल अपवाद के साथ प्रयास/पकड़ में रखा जा सकता है? या शायद आप डीबग मोड में जाने का प्रयास कर सकते हैं?

+0

बीटीडब्ल्यू। मैं बहुत तेज़ था ... रेज़रर अपवाद वापस नहीं कर रहा है। केवल एसक्यूएल सर्वर त्रुटियां ... तो मैं अपनी कस्टम त्रुटियों को कैसे संभाल सकता हूं? – nosbor

+1

क्या आप अपने Try/Catch ब्लॉक में SqlException का उदाहरण प्राप्त कर रहे हैं, और इसके मैसेज या त्रुटियों के गुणों का उपयोग कर रहे हैं ?: (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx) –

0

यहाँ मैं यह कैसे संभाल है:

create procedure dbo.MyStoredProcedure(
    @input nvarchar(255), 
    @output text out 
) 
as 
begin 
    ... 
     SELECT @message = convert(varchar, getdate(), 108) + ': My Exception....' 
     SET @output = CAST(@message AS text) -- send message to c#/.net 
     RAISERROR(@message,0,1) WITH NOWAIT -- send message to SQL Server Management Studio 
    ... 
end 
go 

तो सी #/एफई तरफ:

public string CallMyStoredProcedure(string input) 
{ 
    var outputParameter = new ObjectParameter("output", typeof(string)); 
    EntityContext.MyStoredProcedure(input, outputParameter); 
    return (string)outputParameter.Value; 
} 
3

एसक्यूएल सर्वर अपवाद स्तर 1 से 10 में सूचना के लिए हैं और त्रुटि वापस करने के लिए उठाना नहीं है आपका आवेदन।

एसपी से त्रुटि बढ़ाने के लिए 11 से 16 के बीच स्तर बदलें।

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