2013-06-21 5 views
0

Итак, я начинаю изучать некоторые vb.net, и у меня есть следующая инструкция mysql для получения отдельного счета для столбца в одной из моих таблиц. Это давало мне возможность синтаксических ошибок, но почти все, что я прочитал, указывает на то, что я должен быть прав. Кроме того, я взял его в MySQL Workbench, и он отлично работает, по какой-то причине он просто отказывается работать в моем коде.Выберите Count Distinct Syntax, vb.net

Dim sRetrieve As String 
Dim numvals As OdbcDataReader 
sRetrieve = "SELECT COUNT (DISTINCT defect_code) FROM daily_data WHERE MONTH(date)=" & select_month & " AND YEAR(date)=" & select_year 
Dim query_exe As New Odbc.OdbcCommand(sRetrieve, cn) 
numvals = query_exe.ExecuteReader() 

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

Выяснил это, пространство между COUNT и первым (делало это. Такое смехотворно маленькое дело, что он так долго поддерживал меня, но я думаю, что так оно и есть. Спасибо за помощь, все.

+0

Вам может понадобиться, чтобы добавить некоторые кавычки параметров '' select_month' и select_year'. Кроме того, вероятно, вы должны использовать [параметризованные запросы] (http://stackoverflow.com/questions/542510/how-do-create -a-parameterized-sql-query-why-should-i), а не конкатенация строк. – jbabey

+0

Запрос выглядит хорошо, насколько это возможно. Каковы значения (и типы данных) 'select_month' и' select_year'? И как он «отказывается работать»? Есть ли ошибка MySQL? Ошибка VB? –

+0

Стоящие котировки вокруг него, похоже, не тряслись. select_month и select_year - это целые числа, которые задаются на основе значений, выбранных пользователем из выпадающего списка формы. Например, select_month может быть 6, select_year может быть 2013. Это ошибка MySQL: ERROR [42000] [MySQL] [ODBC 3.51 Driver] [mysqld-5.6.11] У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса, используемого рядом с * *. FROM (SELECT DISTINCT defect_code FROM daily_data) ГДЕ МЕСЯЦ (дата) = 6 И YE 'в строке 1 – user2498668

ответ

0

МЕСЯЦ (дата) в MySQL возвращает строку. Таким образом, вы должны заключить с ' '.

sRetrieve = "SELECT COUNT (DISTINCT defect_code) FROM daily_data WHERE MONTH(date)='" & select_month & "' AND YEAR(date)=" & select_year; 
+0

Я думал наверняка, что это исправит, но такого не повезло. Тем не менее, хороший улов. Я попытаюсь преобразовать его в параметризованный запрос и посмотреть, что это для меня делает. Если ничего другого, похоже, это то, что я должен был сделать в первую очередь, хотя бы по соображениям безопасности. – user2498668