2010-06-22 2 views
2

En ce qui concerne le stockage SQL dans le code, la plupart des gens utilisent des chaînes:stocker des chaînes SQL en XML XElement au lieu de chaîne pour préserver la fin de ligne

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

Le problème est, quand vous avez de très longues chaînes SQL, lecture eux dans le code devient difficile. Vous pouvez généralement diviser les chaînes comme ceci:

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

Cela provoque un certain nombre de problèmes:

  • Vous ne pouvez pas le copier ou de SSMS
  • Il utilise un moyen inefficace (&) de concaténation de la chaîne (pas que cela compte vraiment puisque votre DB est plus lent que la classe de chaînes)

Alors pourquoi ne pas stocker de longues chaînes SQL un type System.XML.Linq.XElement?

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

Vous pouvez l'appeler dans le code en utilisant SQL.Value.

Avec cette méthode, vous pouvez conserver les sauts de ligne et le formatage pour faciliter la lecture et faciliter la copie.


Ma question est, au fond, est-ce que je tombe sur une façon intelligente pour stocker des chaînes SQL multi-lignes dans le code, ou suis-je totalement absent quelque chose ici? Cela semble fonctionner dans mon code, mais je ne suis pas sûr de son efficacité.

Des pensées?

+0

Notez que dans C# cela peut être fait en utilisant le mot-clé @ avant le début de la chaîne –

+0

@ Tim: Merci. C'est encore une autre raison d'utiliser C# sur VB.NET, je pense. J'ai juste vérifié pour voir si VB.NET 10 (la version .NET 4) fonctionnait peut-être comme C# puisque le caractère de continuation de ligne est maintenant facultatif (pour la plupart des choses), mais cela ne fonctionne pas. –

Répondre

2

Je pense que c'est un bon moyen de placer des constantes de chaînes multilignes dans votre code. J'aime ça et je doute que ce soit beaucoup moins efficace. Si vous exécutez un profileur de performance et découvrez que vous avez des problèmes de performances, vous pouvez toujours les remplacer par les constantes de chaîne, mais pendant que vous développez le code, cette méthode est nettement plus facile lorsque vous copiez et collez des commandes SQL.

Vous devriez pouvoir utiliser simplement SQL.Value sans l'appel .ToString car la propriété Value est une chaîne.

+0

'SQL.Value' fonctionne bien, merci. J'ai mis à jour ma question pour refléter cela. –

2

c'est comment l'utiliser ... cela fonctionne très bien

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> 
Questions connexes