2015-03-13 4 views
0

Im благодарен за некоторую помощь за ошибку в моем приложении, которая озадачивает меня !!SQL SELECT COUNT (*) иногда возвращает данные

проверить количество строк в таблице, которые содержат PersonId человека, я ищу с использованием:

cmd.commandtext = "SELECT Count (*) from PeopleDetails where PersonID = '11111'" 
count = cmd.executescalar() 

Это работает 98% времени. Иногда переменная count имеет данные из первого столбца запрашиваемой строки, которая является идентификатором GUID в таблице с именем rowid. Он не имеет ожидаемого целого числа строк, удовлетворяющих условию. Соединение является живым, и если запрос повторяется, он возвращает правильное значение счета.

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

Помощь очень приветствуется !!

SQL сервер 2003, vb.net

Спасибо за взгляд!

+0

Есть ли у вас какой-либо другой оператор sql в том же методе, что cmd.commandtext, который, вероятно, возвращает первый столбец? – Adil

+3

Это не ваш настоящий код. Как вы передаете значение PersonID? Существуют ли другие строки кода, которые взаимодействуют с db? Прошу показать больше контекста. С таким количеством строк кода нет никакой возможности, чтобы вы описали поведение. – Steve

+0

Создаете ли вы новую 'SqlConnection' для каждой из команд? Похоже, вы используете одно и то же 'SqlConnection' из нескольких потоков. – Luaan

ответ

1

Вы создаете новый SqlConnection для каждой из команд? Это похоже на повторное использование того же SqlConnection из нескольких потоков.

SqlConnection/SqlCommand не является потокобезопасным, поэтому вы действительно хотите избежать его одновременного использования из разных потоков.

В целом, не бойтесь создавать новую SqlConnection для каждой отправляемой вами команды (или, по крайней мере, для данного диапазона методов); с включенным пулом соединений, это почти бесплатно, и это сэкономит вам много вреда при проблемах параллелизма.