2013-05-30 58 views
0

我想從表中獲取一些數據。該查詢運行良好與MySQL的但同時asp.net C#類文件執行它拋出異常:在SQL查詢 致命錯誤.. 內部異常@c沒有定義..在asp.net類文件中執行的sql命令致命錯誤

string sqlQuery = "SET @c:=0; 
SELECT * FROM (SELECT TimeStamp, FwdHr, W , @c:[email protected]+1 as counter 
    FROM Meter_Data WHERE TimeStamp >= @fromTime AND TimeStamp <= @toTime 
    AND MeterID = @meterID" + " AND DeviceID = @deviceID) as tmp 
WHERE counter % 20 =1 ORDER BY TimeStamp"; 

如何定義那@c然後?因爲它運行良好SQL服務器

回答

0

你正在執行的不是一個查詢,而是多個語句。

@c您在開始時設置的格式也與用於參數化查詢的格式相同。

c#在您發送的參數列表中搜索@c,並且由於未找到,因此會出現錯誤。

你會更好的在mysql中編寫一個例程,它接受你的參數並返回結果。變量@c將在例程內部。

+0

如果我將@c作爲來自c#var的外部參數傳遞,該怎麼辦? –

+0

您可以將它設置爲'0'作爲參數,但我猜測mysql不會將其視爲內部參數並將其更新爲每行。沒有任何損害嘗試。 – nunespascal

+0

是的,這是問題。有沒有其他方式來聲明變量或任何其他查詢類似的結果沒有變量? @nunepascal –

0

您查詢定義參數裏面你,在SQL它在C#OK,你不申報的查詢裏面的參數 你只把它們傳遞給它

看看這個網站爲例(site

而且更好的是,創建一個存儲過程,並調用它,而不是在你的代碼

這是更好,因爲它會被預編譯,和更少的數據發送到服務器編寫查詢

否則,每次將查詢發送到服務器時,都會重新評估並重新編譯它們

+0

我沒有使用過存儲過程。你能幫忙嗎?也是這些參數減慢查詢。@simsim –

+0

你使用的數據庫是什麼? – simsim

+0

Aha,mysql,剛剛注意到.. .Sorry,我不是很熟悉mysql – simsim

0

它可以通過簡單查詢完成bcz時間戳爲int,它的增量類似 - 1902020222,1902020223,.. 。

string sqlQuery = "SELECT TimeStamp, FwdHr, W FROM Meter_Data WHERE TimeStamp >= @fromTime AND TimeStamp <= @toTime AND MeterID = @meterID" + 
         " AND DeviceID = @deviceID AND TimeStamp%20 = 0 ORDER BY TimeStamp;";