2010-09-16 2 views
1

Существует больше кода, где этот «счет» фактически используется, но он работал неправильно, поэтому я сделал это маленькое окно сообщений, чтобы показать, какое число я действительно получал. Когда я иду phpmyadmin и выполняю прямой SQL-слово в слово (я копирую/вставляю), он не имеет проблем и дает правильное количество раз, когда имя пользователя существует. Тем не менее, каждый раз в моей программе (C#, используя VS2010) он дает мне -1, не существует ли имя, или у меня оно в 5 раз.Почему C# не дает мне -1 из запроса, когда консоль дает мне правильный номер из счета (*)?

Я думаю, что это должно быть связано с тем, как C# форматирует число, которое он возвращает, но я не уверен, как его исправить.

Я также прочитал об использовании EXISTS для этого вместо COUNT (*), но я не мог заставить это работать вообще, это давало мне синтаксические ошибки каждый раз.

ответ

3

Почему вы звоните ExecuteNonQuery, когда он : вопрос?

Используйте ExecuteScalar, чтобы выполнить запрос, который даст единственный результат.

Это нормально для ExecuteNonQuery для возврата -1. Из документов по DbCommand.ExecuteNonQuery:

для UPDATE, INSERT и DELETE заявления, возвращаемое значение является числом строк, затронутых командой. Для всех других типов операторов возвращаемое значение равно -1.

+0

Я честно не уверен. Из того, что я читал, я думал, что ExecuteNonQuery, но это мой первый опыт использования MySQL. Я работаю над этим каждый день, и это единственное, что меня задело до такой степени, что я просто не могу понять. Мне потребовалось 2-3 часа, чтобы установить соединение между моей программой и сервером, на котором находится база данных :(Я попытался переключить его на скалярный, но теперь он отключает мой оператор if, говоря: «Оператор <<не может» применяется к операндам типа «object» и «int» – zack

+0

@zack: Ну да ... это потому, что ExecuteScalar объявлен как возвращаемый 'object'. Вам нужно будет придать результат' int' или 'long'. –

+0

Спасибо, Jon, он отлично работает сейчас. 2 часа я потратил на это, и вы исправили его менее чем за 15 минут! – zack