2012-01-10 43 views
4

我有一個C#控制檯應用程序,使得一堆查詢到數據庫服務器。適當的方式格式化SQL查詢中C#應用程序

我經常需要修改SQL,並想簡單地複製/粘貼從我的SQL編輯器到我的C#源的SQL,而無需每次都重新設置SQL。

目前,SQL是所有在一行...象下面這樣:

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

的SQL比上述長得多了很多表連接的,等

我想保留原來的格式,但真的不希望有回去,並添加引號每一行等

如果任何人有任何建議和實例,我們將不勝感激。

+0

使用存儲過程來更容易地分離SQL。 http://msdn.microsoft.com/en-us/library/ms345415.aspx – Stefan 2012-01-10 18:45:20

+0

我同意。我正在使用DB2,這是一個簡單的實用程序應用程序,使用SP對我來說會過度。另外,DB2不是非常用戶友好的。可怕的產品。 – user500741 2012-01-10 20:31:06

回答

7

我不喜歡這樣寫道:

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

額外的間距,填充有什麼區別嗎?我正在使用DB2,它似乎對SQL語法非常敏感。討厭它。 – user500741 2012-01-10 20:26:11

+0

這可能是特定於db的。我沒有使用DB2的經驗。試試看看。 – RedFilter 2012-01-10 20:31:49

+0

我也是這樣格式化我的SQL語句。它們在SQL Server 2000和SQL Server 2005上運行良好。我沒有針對SQL Server 2008運行它們,但預計額外的間距不會產生影響。 – 2012-01-10 22:06:04

0

只要您使用@語法,那麼你可以有SQL跨越多行就好了。

例如

string sql = @"select 
        colA, 
        colB, 
        colC 
       from 
        tableX 
        inner join tableY 
        on tableX.colA = tableY.colA 
       where 
        colB > 20;" 
2

我的建議是遠離即席查詢推開,好像你正在使用和利用存儲過程。這樣會解耦您的設計,並將您的調用限制爲存儲過程名稱和可能的參數。

但是如果你必須使用即席查詢然後用@前綴,你將能夠跨越多行,而不必加上引號就每一行。

+0

謝謝 - 這個應用程序是一個簡單的實用程序應用程序轉儲一些stuf文件,所以我可以檢查到SVN的審計/更改目的。 – user500741 2012-01-10 20:26:59

0

看來,你的代碼應該可以正常工作。當你用@開始你的字符串時,你使用的是逐字字符串。換行符和格式都被保留下來,並且不需要用引號括住每行。你只需要一個結束報價。