2014-07-02 74 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