Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

SQL Statements in MS Visual Basic 2008

2. Oktober 2009 , Geschrieben von Olaf Helper Veröffentlicht in #.NET

SQL Statements in Source Code sind immer so eine Sache, was die Formatierung und den Aufbau betrifft, insbesondere bei (sehr) langen Statements.

Die einen nutzen den StringBuilder, um es zeilenweise aufzubauen. In Visual Basic gibt es noch die Alternative, mittels der Zeilenfortsetzung-Zeichen (was man sich in C# sparen kann) den String zu konkatenieren. Das ist aber auch nicht so ohne: Wenn man das Statement im Management Studio erarbeitet + getestet hat, kopiert man es in Visual Studio und darf es überarbeiten, also alles in Anführungszeichen setzen und sie eben zu verbinden. Will man irgendwann mal wieder mit dem Statement in SSMS zurück, muss man dort wieder die Anführungszeichen etc. wieder entfernen.

Mit Microsoft Visual Basic 2008 gibt es die Möglichkeit im Source Code XML direkt zu erfassen, also nicht als String, und das kann man für SQL Statements etwas „zweckentfremden“: Man erfasst ein einfaches Tag und schreibt das SQL Script als Inhalt rein:

 

 Module SqlString 
   
  Sub Main() 
  'Der klassische Weg: Als String konkateniert mit Zeilenfortsetzung 
  Dim sql As String 
  sql = "SELECT [AddressLine1] " & _ 
  ",[AddressLine2] " & _ 
  ",[City] " & _ 
  ",[PostalCode] " & _ 
  "FROM [AdventureWorks].[Person].[Address] " & _ 
  "WHERE [AddressID] = @addressId" 
   
  'Als implizites XML; ermöglicht es, das Statement direkt aus  
  'SSMS hierein und wieder zurück zu kopieren 
  Dim xml 
  xml = <sql> 
  SELECT [AddressLine1] 
  ,[AddressLine2] 
  ,[City] 
  ,[PostalCode] 
  FROM [AdventureWorks].[Person].[Address] 
  WHERE [AddressID] = @addressId 
  </sql> 
  'Klassisch kann man den String "as it" verwenden  
  Console.WriteLine(sql) 
   
  'XML Objekt als String ausgeben und die Tags abschnippel 
  'dazu muss der Tag aber immer gleich (lang) sein 
  Console.WriteLine(xml.ToString.Substring(6, xml.ToString.Length - 12)) 
   
  'Aufwendiger über XML Objekt, dafür flexibler und sicherer 
  Dim doc As New Xml.XmlDocument 
  doc.LoadXml(xml.ToString) 
  Console.WriteLine(doc.FirstChild.InnerText) 
  doc = Nothing 
   
  'Warte auf Key 
  Console.ReadKey() 
  End Sub 
   
 End Module 

 

Nun kann man bequem das Statement aus SSMS heraus und ebenso wieder zurück kopieren, ohne etwas ändern zu müssen. Dynamisch zusammen gestelltes SQL ist so nicht möglich, aber wir arbeiten ja eh immer brav & artig mit Parameter, gelle?

Das Handling ist etwas aufwendiger als über reinen String, hält sich aber in Grenzen.

Was mir nicht so gefällt sind die vielen Leerzeichen. Zwar stören sie nicht, aber sie sind ja nun unnötig und stellen zusätzlichen Traffic für die Übertragung dar; nicht viel, aber Kleinvieh mach auch Mist, vor allem wenn es häufig ausgeführt wird.

Das Ergebnis sieht so aus:

 

 SELECT [AddressLine1] ,[AddressLine2] ,[City] ,[PostalCode] FROM [AdventureWorks].[Person].[Address] WHERE [AddressID] = @addressId 
   
   
  SELECT [AddressLine1] 
  ,[AddressLine2] 
  ,[City] 
  ,[PostalCode] 
  FROM [AdventureWorks].[Person].[Address] 
   WHERE [AddressID] = @addressId 

Diesen Post teilen

Repost 0

Kommentiere diesen Post