2013-08-27 4 views
1

Я Тринг запустить SQL скрипт из моего C# приложенияНе удается получить сообщение об ошибке 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' –