2013-08-27 88 views
1

我特林從我的C#應用​​程序運行SQL腳本,無法獲得SQL的錯誤信息

string sql = File.ReadAllText(sqlFile); 
string[] QueryArray= sql.Split(new string[] { "GO" }, StringSplitOptions.RemoveEmptyEntries); 

foreach (string query in QueryArray) 
{ 
    cmd = new SqlCommand(query, Connection); 
    cmd.ExecuteNonQuery(); 
} 

然後我的腳本包含RAISERROR語句

RAISERROR ('Cannot procees' , 20, 1) WITH LOG 

當我嘗試訪問該錯誤消息,構成了我C#應用程序,這不會發生。錯誤信息返回給我的是:

A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)

我哪裏出問題了。我需要做什麼才能獲得由raiserror

+1

你'RAISERROR'定義20的嚴重程度,這使得SQL Server的終止當前的過程......使用11和19之間,而不是東西!然後你的過程將保持原狀,你應該能夠從SQL Server中獲取錯誤的內容 –

+0

我猜測OP甚至沒有正確打開到數據庫的連接。 – dcaswell

+0

@ marc_s-但神奇的是我能夠隨機獲得錯誤。但很少。這是可能發生的。 不改變嚴重程度,有沒有辦法從我的c#應用程序端處理這個問題?如果我更改嚴重性級別,它可以工作 –

回答

1

嘗試改變嚴重性值 -

RAISERROR ('Cannot procees', 16, 1) WITH LOG 
+0

是的。那是有效的。但我正在尋找一種方式,是否可以在不改變靈敏度級別的情況下從我的C#應用​​程序端處理此問題。 –

+0

只需嘗試使用try \ catch塊。並閱讀本主題:http://stackoverflow.com/questions/1122925/what-do-the-different-raiserror-severity-levels-mean – Devart

+0

代碼已經在'try \ catch'裏面了。我收到'e.message'的錯誤消息 –