【发布时间】:2013-06-26 13:28:20
【问题描述】:
我正在尝试将 DataBind 绑定到 GridView 控件,但它始终失败。
给定以下代码(为便于阅读,sql 扩展为多行):
protected void Page_Load(object sender, EventArgs e)
{
string dsn = "foo";
string sql = "SELECT * FROM (SELECT F.Project AS 'Project Number', F.Account AS
'Account', F.Pd AS Period, F.Incurred AS Totals, C.Project AS
'Project Name' FROM Ultron.Final F INNER JOIN Ultron.Custom
C ON F.Project = C.Project WHERE F.Project LIKE '61000.003%' AND
F.Account NOT LIKE '%-01' AND F.Fy = YEAR(GetDate()) ) Budget PIVOT
(SUM(Totals) FOR Period in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
[11],[12]) AS PivotTable";
using (SqlConnection conn = new SqlConnection(dsn))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
testGrid.DataSource = reader;
testGrid.DataBind();
}
}
我确定该错误与查询中的括号有关,但这些是查询正常工作所必需的。在 SSMS 中测试时,查询通过没有问题。
我如何重组它以使代码不会失败?
编辑
我在 SQL 查询的末尾缺少As PivotTable。现在可以了。对不起,这是一个无辜的错字。感谢所有回复的人。
【问题讨论】:
-
您在
BudgetPIVOT之间缺少一个空格。如果您从代码中删除 SQL,您应该尝试在 SSMS 中执行它,这将有助于您调试问题。 -
你能把你的硬编码查询变成一个存储过程,然后调用那个 SP 吗?
-
BudgetPIVOT应该是Budget PIVOT吗?或者这只是复制过去的错误? -
这就是格式化 SQL 很重要的原因。
-
您应该始终首先在 sql 编辑器中运行您的查询,以确保它有效。正如其他 OP 所提到的,您有几个语法错误。您也没有显示最初遇到的错误。那会很有帮助的。