簡體   English   中英

將SQL存儲在變量中的最佳方法

[英]Best way to store SQL in variables

目前我將查詢放在這樣的變量中。

query = @"  select top 1
                u.UserID
            from
                dbo.Users u
            where
                u.SystemUser = 1
                and u.Status = @Status";

這樣做的問題是,當轉到新行時,縮進會丟失,我必須自己添加。

有誰知道更好的方法? 我知道存儲過程是可能的(消除這種縮進問題),但我不確定它們是否對於純數據檢索更好。

忽略TSQL的仇恨; 了解一些TSQL並沒有什么本質上的錯誤! 無論如何,我會接近這個(如果我保留你的格式,這不是我的常態 - 但是...... meh);

                // your existing code at, say, this level
                var query = @"
select top 1
      u.UserID
from
      dbo.Users u
where
      u.SystemUser = 1
      and u.Status = @Status";

                // some more code at, say, this level

通過將TSQL保持在左側,在IDE中更容易進行任何縮進等,但它也會縮短您的TSQL,並且在查看跟蹤時更容易調試,因為它不是奇怪的30個字符在select之前從換行符開始也有助於保持整潔。

就個人而言,我還發現代碼縮進和TSQL縮進之間的脫節有助於找到TSQL - 而TSQL對我來說非常重要,所以這是一件好事 並且強調我們剛剛改變“世界”(因為想要一個更好的術語)也沒有害處。

你應該至少考慮使用LINQ。 它確實有學習曲線,但它會為您提供編譯器檢查查詢語法的優勢。

您沒有說這是否是一個Web應用程序,但是如果您從用戶輸入(例如從Web URL或從瀏覽器發布的數據)獲得對查詢的任何輸入,則在發送到之前將用戶輸入嵌入到字符串中與其他執行查詢的方法相比,查詢引擎還會冒SQL注入攻擊的風險。

使用Entity Framework是另一種很好的方法。 我最近使用了Code First方法,非常優雅。 最后,存儲過程也是一種很好的方法。

你總是可以這樣做:

query = " select top 1"
      + "     u.UserID"
      + " from"
      + "     dbo.Users u"
      + " where"
      + "     u.SystemUser = 1"
      + "     and u.Status = @Status";

至少這樣,你的IDE將縮進字符串,而不是SQL。 如果你這樣做,你必須小心為每一行添加一個前導空格。

更好的選擇是使用LINQ:

result = (from
             u in dbo.Users
         select
             u.userId
         where
             u.SystemUser == 1 &&
             u.Status = @Status
).Take(1)

首先,只有人類能夠看到它時,SQL的格式才是重要的。

如果您真的想保留縮進,可以將字符串放在資源中(在資源編輯器中使用SHIFT + ENTER來插入新行)。 感謝Visual Studio魔術,訪問資源很容易(Properties.Resources。*)。

如果您使用的是WPF,則還可以使用XAML資源。

或者您可以使用不同的方式來獲取pure data
你可以用

stored procedues
LINQ 2 SQL
Entity Framework
ADO.NET

硬編碼的sql語法不是最佳實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM