2010-06-22 106 views
2

當涉及到存儲SQL代碼,大多數人使用的字符串:存儲SQL字符串保留換行符

Dim strSql As String = "Select Foo, Bar From FooBarTable Where Something = @Something" 

的問題是,當你有很長的SQL字符串,讀數他們在代碼中變得困難。你通常可以分割字符串像這樣:

Dim strSql As String = "Select Foo, Bar From FooBarTable " & _ 
         "Where Something = @Something" 

這導致了一些問題:

  • 你不能把它複製到或從SSMS
  • 它使用一個低效的方式(& )連接字符串(不是它真的很重要,因爲你的DB比字符串類慢幾個數量級)

那麼爲什麼不把長SQL字符串存儲爲一個System.XML.Linq.XElement類型?

Dim SQL = <SQL> 
       Select Foo, Bar From FooBarTable 
       Where Something = @Something 
      </SQL> 

您可以使用SQL.Value在代碼中調用它。

使用此方法,您可以保留換行符和格式,使其更易於閱讀和更容易複製。


我的問題是,基本上,我才偶然發現一個聰明的方式來存儲代碼多行SQL字符串,還是我完全失去了一些東西?它似乎在我的代碼中工作,但我不確定它的效率如何。

有什麼想法?

+0

注意,在C#這可以使用@關鍵字串 – 2010-06-22 21:42:46

+0

@Tim開始之前完成:謝謝。這是使用C#而不是VB.NET的另一個原因,我認爲。我只是檢查,看看可能VB.NET 10(.NET 4版本)像C#一樣工作,因爲行續字符現在是可選的(對於大多數情況),但它不起作用。 – 2010-06-22 21:51:16

回答

2

我認爲這是在你的代碼中放置多行字符串常量的好方法。我喜歡它,我懷疑它效率低得多。如果您運行性能分析器並發現性能問題,則可以始終用字符串常量替換它們,但在開發代碼時,複製和粘貼SQL命令時此方法肯定更容易。

因爲Value屬性是一個字符串,所以您應該能夠簡單地使用SQL.Value而不需要.ToString調用。

+0

'SQL.Value'很好,謝謝。我更新了我的問題以反映這一點。 – 2010-06-22 21:41:00

2

這是怎麼使用它...它工作得很好

Dim sFieldName As String = "MyField" 
    Dim sTableName As String = "MyTable" 
    Dim sValue As String = "MyValue" 

    Dim xeSQL = <SQL> 
     SELECT <%= sFieldName %> AS Field1 
     FROM 
      <%= sTableName %> 
     WHERE 
      <%= sFieldName %> = '<%= sValue %>' 
      </SQL>