2015-02-07 4 views
0

Я пытаюсь получить возвращаемый счетчик запроса. В моем случае всегда будет 0 или 1. Я вставляю клиента в свою базу данных, я есть или нет, они уже существуют, если они делают, я генерирую исключение, если не вставляю. Это то, что у меня есть:Получение возврата Count of Select SQL Server

string selectQuery = "select ([Cust_Num]) from [TBL_Customer] where [Cust_Num] = '" + myTable.Rows[i][custNum] + "'"; 
SqlCommand sqlCmdSelect = new SqlCommand(selectQuery, sqlConn); 
sqlCmdSelect.Connection.Open(); 
sqlCmdSelect.ExecuteNonQuery(); 

//checks if query returned anything 
int queryCount = Convert.ToInt32(sqlCmdSelect.ExecuteScalar()); 
sqlCmdSelect.Connection.Close(); 

Сейчас queryCount возвращает 0, если он не существует в моей таблице. Но он возвращает номер клиента, если он существует. Поэтому вместо возврата 1 он возвращает 123456, который является номером клиентов .....

Кто-нибудь знает, почему это происходит?

+0

* (не связанные непосредственно с вашей проблемы) * [Ваш код может быть уязвимы для атак SQL Injection] (http://stackoverflow.com/questions/332365/how-does-the-sql- инъекции из-за-Бобби-столы-XKCD-комической работа). Вы должны параметризовать свой запрос. –

+0

(Также не был напрямую связан, но последний парень сделал это :) бросая исключение, чтобы справиться с известным случаем, это плохая форма. Кроме того, исключения являются дорогостоящими. – THBBFT

+0

Хорошо, что тогда было бы подходящим действием? Мне любопытно сейчас @THBBFT – codeFinatic

ответ

2

Вместо этого используйте count агрегат

select count(Cust_Num) from [TBL_Customer] where [Cust_Num] = .. 

для данного cust_num Count агрегата будет подсчитать, сколько раз cust_num присутствует. Если cust_num существует, то он вернет count еще 0

или даже 1 в качестве закодированного значения

select 1 from [TBL_Customer] where [Cust_Num] =.. 

здесь, если cust_num существует, то он будет возвращать 1 еще ничего не будет возвращено

+0

Как это будет работать? Вы можете объяснить? Извините, я просто хочу понять ... – codeFinatic

+0

И это все равно будет храниться в моей переменной queryCount? – codeFinatic

+0

@codeFinatic - Я не знаю, как работает ваш запрос C# –

0

нескольких пунктов здесь. Почему вы используете ExecuteNonQuery и ExecuteScalar в своем коде? Если вам просто нужен счет, то приведенный выше ответ @NoDisplayName является идеальным.

Пример: этот пример вернет вам количество сотрудников с последним анонимным Coleridge.

SqlCommand Cmd = new SqlCommand("SELECT COUNT(1) FROM Employee WHERE LastName='Coleridge'"); int result = Convert.ToInt32(Cmd.ExecuteSaclar());

+0

Я закончил тем, что исправил его, спасибо за ввод. – codeFinatic