-3
string sqlQueryString = " SELECT g.code AS GoodCode, g.name AS GoodName, " +
"msr.name AS MsrName, sm.min_quan AS KolMin, sm.max_quan AS KolMax, " +
"sm.quan AS KolNal, ord.prc AS EdPrice, s.name AS Sklad, m.name AS Mol, " +
"k.code AS KodDost, k.name AS NameDost " +
"FROM N_GOODS_{0} AS g INNER JOIN " +
"G_SMGS_{0} AS sm ON g.id = sm.good_id INNER JOIN " +
"N_KNTRS_{0} AS k ON g.id = k.id INNER JOIN " +
"N_PRC_LISTS_{0} AS pr ON g.id = pr.id INNER JOIN " +
"G_ORDD_{0} AS ord ON sm.smg_id = ord.smg_id INNER JOIN " +
"N_MOLS_{0} AS m ON sm.mol_id = m.id INNER JOIN " +
"N_STORS_{0} AS s ON sm.stor_id = s.id INNER JOIN " +
"N_MSRS_{0} AS msr ON g.id = m.id";
sqlQueryString = String.Format(sqlQueryString, dbLink.CurrentFirm.Id);

return " ( " + sqlQueryString + " ) AS t";

这是一个 sql 查询的字符串,我正在尝试在一段 c# 代码中执行此操作。然而,我花了一整天的时间试图让它发挥作用。这是我得到的错误:

关键字“FROM”附近的语法不正确。
关键字“AS”附近的语法不正确。
4

3 回答 3

5

尝试:

return "SELECT * FROM ( " + sqlQueryString + " ) AS t";

此外,您应该尝试在return语句上设置断点。获取sqlQueryString那里的值并尝试直接在 SQL Server Management Studio 中运行它。

于 2012-08-17T11:57:50.247 回答
3

首先,这可能不是一个 C# 问题,只是说您可能应该学习...

string strSql = @"SELECT * 
                   FROM TABLE";

语法,以便 1.) 你可以取消所有的" +东西和 2.) 你可以从 isql 客户端剪切和粘贴一些东西。

所以你真正想做的是...

  1. 通过在最后一行设置断点在 IDE 中进行调试,
  2. 将光标悬停在sqlQueryString,
  3. 右键单击sqlQueryString出现的“浮动”(我把鼠标放在上面strReturn,浮动出现了。右键单击strReturn出现在上方的浮动 - 蓝色矩形就是你想要的)

来自 var 的 Visual Studio 的 floater

  1. 选择复制的选项。
  2. 将带有 ' 内容的剪贴板粘贴sqlQueryString到记事本、gvim 等中。
  3. 让我们知道那是什么意思。
  4. 然后准确地告诉我们当您直接对数据库运行该语句时会发生什么

您还可以让我们了解您预期会发生什么[基于之前对数据库运行原始查询,也许]。

然后接受即使是我们中最好的人偶尔也会浪费一两个小时用 SQL 做一些愚蠢的事情。;^) 然而,有了以上信息,我们可能会帮助减少一点。

编辑: 相反,如果正如您的评论所建议的那样,查询在直接针对(MS-SQL Server?)运行时有效,那么当您针对数据库运行它时,C# 问题可能会出现在此代码之后。首先执行上述操作并确保 sqlQueryString 中的内容是您针对 db 运行的内容。

EDIT2:将调试步骤制成项目符号列表,以使它们更加明显。不要只是告诉我们它有效;告诉我们里面有什么sqlQueryString但是,再次与第一次编辑一样,如果该字符串没问题,您的问题可能会在稍后出现在您的 C# 代码中。

您是否立即对数据库进行攻击?那个代码是什么样子的?

于 2012-08-17T12:05:14.403 回答
1

看起来问题出在最后的 return 语句中。

( SELECT foo FROM bar ) AS baz; 它本身不是一个有效的 SQL 语句,它是一个片段。

正如@Yuck 建议的那样,请尝试SELECT * FROM ( " + sqlQueryString + " ) AS t";

于 2012-08-17T12:12:41.010 回答