2013-06-21 123 views
0

所以我开始学习一些vb.net,并且我有以下的mysql语句来为我的一个表中的列获得一个不同的计数。它一直给我适合语法错误,但几乎所有我读过的东西都表明我拥有的应该是正确的。此外,我把它放到MySQL Workbench中,它工作正常,无论出于什么原因,它只是拒绝在我的代码中工作。Select 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() 

我一直在敲我的头这一段时间,现在,所以任何告诉我,帮助这有什么错,MySQL的声明将不胜感激。

算出来了,COUNT和第一个之间的空间(这样做是一件非常有趣的事情,它让我久久不能相信,但我想这就是它的原因。大家好。

+0

您可能需要添加周围的参数'select_month'和'select_year'一些报价。另外,你应该使用[参数化查询](http://stackoverflow.com/questions/542510/how-do-i-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错误: 错误[42000] [MySQL] [ODBC 3.51驱动程序] [mysqld-5.6.11]您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在'*)FROM(SELECT DISTINCT defect_code FROM daily_data)附近使用正确的语法WHERE MONTH(date)= 6 AND YE'在第1行 – user2498668

回答

0

MONTH(日期)在mysql中返回的字符串。因此,你需要用' '附上。

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

我以为肯定会修复它,但没有这样的运气。仍然,很好的捕获。我将尝试将其转换为参数化查询,并查看是否为我执行了任何操作。如果没有别的,这听起来像是我应该首先完成的事情,如果仅仅是出于安全原因。 – user2498668