在C#应用程序中格式化SQL查询的正确方法

4
我有一个C#控制台应用程序,它向数据库服务器发起了大量查询。
我经常需要修改SQL,并希望能够直接将SQL从我的SQL编辑器复制/粘贴到C#源代码中,而不必每次重新格式化SQL。
目前,SQL都在一行上...如下:
  OleDbDataAdapter da_ssm_servers = new OleDbDataAdapter(@"SELECT * FROM mytable ORDER BY Server;", connSSM);

SQL语句比上面的内容长得多,有许多表连接等。

我想保留格式,但不想每行都添加引号等。

如果有人有任何建议和示例,将不胜感激。


使用存储过程来分离 SQL 更容易。http://msdn.microsoft.com/zh-cn/library/ms345415.aspx - Stefan
我同意。我正在使用DB2,这是一个简单的实用程序应用,使用存储过程对我来说有点杀鸡用牛刀了。而且,DB2并不是很用户友好。糟糕的产品。 - user500741
4个回答

8
我会这样做:

我是这样做的:

string sql = @"
    SELECT * 
    FROM mytable 
    ORDER BY Server";
OleDbDataAdapter da_ssm_servers = new OleDbDataAdapter(sql, connSSM); 

额外的空格和填充是否有任何影响?我正在使用DB2,它似乎对SQL语法非常敏感。讨厌它。 - user500741
可能是特定于数据库的。我没有使用DB2的经验。试一下,看看吧。 - D'Arcy Rittich
我也是这样格式化我的SQL语句的。它们在SQL Server 2000和SQL Server 2005上运行良好。我还没有在SQL Server 2008上运行过它们,但我预计额外的空格不会产生影响。 - Ɖiamond ǤeezeƦ
请注意不要在字符串中插入任何 <kbd>tab</kbd> /t 字符,因为大多数数据库在运行时会报错。 - Seph

2
我的建议是避免使用类似于你正在使用的临时查询,并利用存储过程。这将解耦你的设计,并限制你对存储过程名称和可能的参数的调用。
但如果你必须使用临时查询,则在前面加上@,这样就可以跨越多行而无需在每行周围加引号。

谢谢 - 这个应用是一个简单的实用程序,可以将一些东西转储到文件中,以便我可以为审计/更改目的检查到SVN。 - user500741

0

看起来你的代码应该可以正常工作。当你以@开头时,你使用的是一个逐字字符串。换行和格式都会被保留,你不需要在每一行加引号。你只需要一个结束引号。


0
只要使用@语法,你就可以很好地跨越多行编写SQL。
例如:
string sql = @"select 
                  colA, 
                  colB, 
                  colC
               from
                  tableX
                  inner join tableY
                     on tableX.colA = tableY.colA
               where
                  colB > 20;"   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接