2015-06-15 3 views
-1
queryShelf = "SELECT * FROM shelftable WHERE ShelfId= @ShelfId"; 

//Create Mysql Command 
MySqlCommand cmd = new MySqlCommand(queryShelf, connection); 

cmd.Parameters.Add(new MySqlParameter("@ShelfId", MySqlDbType.VarChar)).Value = MainWindow.shelfIds[i]; 

//ExecuteScalar will return one value 
int Count = int.Parse(cmd.ExecuteScalar() + ""); 
+3

В чем ваш вопрос в точности? Каков первый столбец первой строки, возвращаемый запросом? –

+2

Не используйте * в запросе. Вам нужно вернуть значение, а не «массив» значений –

ответ

1

ExecuteScalar используется для возврата одно значение, вы выбираете полные записи. Поэтому обычно вы используете ExecuteReader и используете Read, чтобы получить все записи.

На самом деле вы можете использовать ExecuteScalar с SELECT *. Случается, что возвращается первый столбец первой строки в результирующем наборе или ссылка null, если набор результатов пуст.

Поскольку вы получаете NULL, кажется, что фильтр не возвращает запись.

Так как вы хотите счетчик вы можете изменить ваш запрос:

queryShelf = "SELECT COUNT(*) FROM shelftable WHERE ShelfId= @ShelfId"; 
// ... 
int Count = (int) cmd.ExecuteScalar(); 

Теперь вы никогда не получите null, но количество записей, 0, если запись не существует с этим ShelfId.

+0

Спасибо @Tim .. Это сработало –

Смежные вопросы