Не удалось преобразовать строку в ошибку TimeSpan - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь опубликовать в своей базе данных, используя SqlCommand, например так:

 queryLogResults.Parameters.Add("@executionTime", SqlDbType.Time).Value = executionTime;

Это строка, которую я передаю в качестве executeTime

string performanceTime = _stopWatch.Elapsed.ToString("mm':'ss':'fff");

Я предполагаю, что в ней есть что-то делать с миллисекундами, потому что это работает только иногда, и если я отправляю только минуты и секунды, это работает каждый раз. Я не использую правильный тип SqlDbType? В моей базе данных ExecutionTime есть значение времени (7).

Ответы [ 2 ]

3 голосов
/ 03 апреля 2020

Если вы пытаетесь установить значение параметра типа SqlDbType.Time, вам не нужно преобразовывать его в строку. Просто используйте

TimeSpan performanceTime = _stopWatch.Elapsed;
queryLogResults.Parameters.Add("@executionTime", SqlDbType.Time).Value = performanceTime;
2 голосов
/ 02 апреля 2020

Похоже, это одинарные кавычки в строке формата:

mm':'ss':'fff

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

Поэтому строка с лучшим форматом выглядит следующим образом:

HH:mm:ss.fff

Поскольку ADO. Net хочет преобразовать это Строковое значение возвращается в TimeSpan, оно должно быть в состоянии проанализировать строку, и эти различия форматирования отбрасывают его.

Более того, поскольку ADO. Net уже будет использовать TimeSpan значение, я предлагаю изменить тип аргумента метода с string на TimeSpan. Затем вы можете передать _stopWatch.Elapsed в метод без преобразования в строку.

Это также улучшит производительность. Из-за сложности и разнообразия вариантов локализации / культуры преобразование значений даты и чисел c в строки и обратно удивительно дорого. Вы можете сэкономить своему компьютеру некоторую работу, избегая двух преобразований в этом коде.

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