2014-07-02 111 views
0

在ASP.NET中,'select-query'可以按如下方式動態變化: 這會拋出一個錯誤,這怎麼能實現?SQL查詢中列的變量選擇

SelectCommand="SELECT TOP 30 [date],**[@tc]** FROM [tbl_TC] WHERE ([ID] = ?) ORDER BY [date]"> 
<SelectParameters> 
**<asp:QueryStringParameter Name="@tc" QueryStringField="tc" />** 
<asp:QueryStringParameter Name="ID" QueryStringField="pid" Type="String" /> 
</SelectParameters> 

回答

1

你不能這樣在SQL,更不用說ASP.NET。您必須通過將字段名稱插入字符串來生成SQL。

我不知道的方式做到這一點聲明 - 你可能要去必須做在綁定代碼隱藏和dynaimcally建立SQL:

string SQL = "SELECT TOP 30 [date], [" + tc + "] FROM [tbl_TC] WHERE ([ID] = ?) ORDER BY [date]"; 
+0

聽起來是正確的,但在[]周圍[「+ TC +」]將可能使數據庫引擎認爲這意味着一列,即使是列的列表。從字符串中刪除[]並將它們包含在tc變量中應該可以工作 – Twelfth

+0

@Twelfth由於問題中的代碼包含了括號,因此我認爲_intent_只有一列。 –

+0

+1在這兩種情況下;) – Twelfth

0

使用命令對象,用列名替換佔位符文本。

Dim sqlConnection1 As New SqlConnection("Your Connection String") 
Dim cmd As New SqlCommand 
Dim reader As SqlDataReader 

Dim qryString = "SELECT TOP 30 [date],**[@tc]** FROM [tbl_TC] WHERE ([ID] = [?]) ORDER BY [date]" 

qryString = qryString.Replace("**[@tc]**", "yourcolumnnameshere").replace("[?]", "datequerystringhere") 

cmd.CommandText = qryString 
cmd.CommandType = CommandType.Text 
cmd.Connection = sqlConnection1 

sqlConnection1.Open() 

reader = cmd.ExecuteReader() 
' Data is accessible through the DataReader object here. 

sqlConnection1.Close() 

MSDN編號:http://msdn.microsoft.com/en-us/library/fksx3b4f.aspx

+0

動態選擇列謝謝@GJKH爲完整的解決方案,但我覺得它更簡單,追加查詢字符串與一個如斯坦利所建議的那樣變化。 – user3715501