2011-11-29 24 views
1

我目前正在寫一個從Firebird數據庫讀取日期的方法。 這裏是頭:按參數排序火鳥+ C#

public static void ReadInfo(int first, int skip,string orderBy) 

這是我的SQL查詢:

const string SQL = "SELECT FIRST @first SKIP @skip A.ID,B.SHORTNAME, A.DATETIME, A.COMPUTERNAME,A.OSLOGIN, A.DBLOGIN, A.INFOTYPE, A.INFO FROM EVENTSGENERAL A JOIN EVENTSGENERATORS B ON B.GENERATOR_ = A.GENERATOR_ ORDER BY @orderBy"; 

這裏是我的查詢準備參數:

cmd.Parameters.Add("@first", FbDbType.Integer).Value = first; 
cmd.Parameters.Add("@skip", FbDbType.Integer).Value = skip; 
cmd.Parameters.Add ("@orderBy", FbDbType.VarChar, 50).Value = orderBy; 

的問題是:在前兩個參數工作(首先和跳過準備正確),我已經測試過它。但是,在orderBy參數引發exeption有一次,我嘗試運行它:

{"Dynamic SQL Error\r\nSQL error code = -804\r\nData type unknown"} 

從來就試圖改變腳趾FbDbType爲「文本」,但仍然沒有工作。 對不起,有任何不好的英語。 提前感謝您提供的任何幫助。

+0

只是想:cmd.Parameters.Add(新FbPa​​rameter( 「@排序依據」,FbDbType.VarChar,50)) .Value = orderBy; 仍然無法正常工作。 –

回答

1

對於order by子句需要字段指定你不能傳遞字段名稱。如果您製作@orderBy參數數據類型integer並傳遞字段索引,可能會有效。例如

select id, name from city order by 1 //this will order by id field 

,或者如果您以編程方式編輯SQL語句是這樣的:

string SQL = "SELECT FIRST @first SKIP @skip A.ID,B.SHORTNAME, A.DATETIME, 
A.COMPUTERNAME,A.OSLOGIN, A.DBLOGIN, A.INFOTYPE, A.INFO FROM EVENTSGENERAL A JOIN 
EVENTSGENERATORS B ON B.GENERATOR_ = A.GENERATOR_ ORDER BY {0}"; 
SQL = string.Format(SQL, orderBy); 
+0

解決了我的問題,非常感謝@Reniuz。 –