2013-06-21 165 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