2010-06-22 105 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>