Как поймать правильно SqlException: ошибка транспортного уровня произошла

Я добираюсь SqlException в журналах.NET 3,5 приложения я ищу соответствующее число (значение свойства SqlException.Number).

System.Data.SqlClient.SqlException: A transport-level error has occurred 
when receiving results from the server. (provider: TCP Provider, error: 0 
- The specified network name is no longer available.) at
System.Data.SqlClient.SqlConnection.OnError

Я также получаю ошибку, такую как:

System.Data.SqlClient.SqlException: A network-related or instance-specific error 
occurred while establishing a connection to SQL Server. The server was not found 
or was not accessible. Verify that the instance name is correct and that SQL Server
is configured to allow remote connections.

Кто-либо знает, как правильно поймать те исключения? (можно также отправить ответ здесь),

6
задан Community 23 May 2017 в 12:24
поделиться

2 ответа

Эта конкретная ошибка возникает не из-за sys.messages в SQL Server - это проблема с подключением. Так что у меня нет номера под рукой.

TBH, лучшее, что вы должны сделать, это убедиться, что Номер записан в журнал за исключением - таким образом, вы всегда будете рядом с номером и сообщением в журналах. Не могу ответить на ваш текущий вопрос, но это будет лучший вариант ИМХО. Не только SqlException.Number , но и SqlException.ErrorCode - в таких случаях, я думаю, .ErrorCode может быть тем, что вам действительно нужно (не уверен, не проверяя) .

5
ответ дан 9 December 2019 в 22:33
поделиться

Любые данные/вычисления, обработанные в JavaScript в браузере, будут небезопасны, поскольку весь код выполняется на локальном компьютере. Я бы рекомендовал перечислить все параметры, критически важные для честного опыта игры, такие как положение игрока, счет, ресурсы... вычисляют управление этими параметрами на стороне сервера. Вы можете собирать пользовательские входные данные только из браузера и отправлять обновленное состояние в браузер для дисплея.

Даже если вы решите вычислить некоторые значения на стороне браузера, чтобы избежать задержек, вы не должны учитывать их для общего глобального состояния игроков, и вы должны повторно синхронизировать локальное состояние с глобальным состоянием - всегда в направлении глобальный-локальный - время от времени.

Как и в обычной форме обработки, вы также должны проверить, что значения, отправленные браузером для пользовательских вводов, попадают в разумные границы, например, относительное перемещение за одну секунду меньше определенного расстояния.

-121--4859459-

Поведение не является странным, оно имеет вид

Анализ текста из начала данной последовательности для получения числа. Метод не может использовать весь текст данной последовательности.

Метод анализа с учетом положения можно использовать следующим образом:

public static double parse(String str) throws ParseException {
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition position = new ParsePosition(0);
  Number number = formatter.parse(str, position);
  if (position.getIndex() != str.length()) {
    throw new ParseException("failed to parse entire string: " + str, position.getIndex());
  }
  return number.doubleValue();
} 
-121--4244624-

Для этого метода не будет найден соответствующий номер ошибки SQL - проще говоря, ошибка возникает из-за проблемы с подключением к серверу.

Поскольку код не может подключиться к SQL Server, он не будет содержать сообщения об ошибке SQL.

Из статьи MSDN о SQLException.Number :

Это число соответствует записи в таблице master.dbo.sysmessages.

Для исключений, не имеющих связанного номера ошибки SQL, можно использовать код ошибки HRESULT Windows, который будет находиться в свойстве ErrorCode объекта исключения.

4
ответ дан 9 December 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: