2015-08-06 7 views
6

Ho avuto un progetto in vb.net che ha usato XML Literals per elaborare grandi blocchi di SQL in questo modo:Come ottenere stringhe multilinea in C#; un'alternativa ai letterali XML di VB?

Dim SQL As String = <a> Use test 

alter table BarFoo alter column CouponName nvarchar(328) 
alter table Foo alter column IngredientName nvarchar(328) 
alter table Bar alter column IngredientShortDescription nvarchar(328) 
alter table FooBar alter column ItemName nvarchar(328) </a>.Value 

Ma cant sembrano trovare il suo equivalente per C# Qualche suggerimento?

+0

Stai chiedendo come scrivere una costante di stringa che si estende su molte linee in C#? –

+1

Non è chiaro cosa stai cercando di fare. Cosa significa " .Valore"? – Steve

+0

Mi scuso se sembra una domanda stupida. Sto imparando C# e sì, stavo cercando di scrivere una stringa che si estende su molte linee in quanto ho blocchi molto grandi di codice SQL che devono entrare nel codice. In VB.net questo sarebbe compilato senza problemi ed eseguito bene. – ephtee

risposta

8

È possibile inserire come prefisso una costante di stringa con @ per estendersi su più righe. L'unica cosa che dovrebbe essere sfuggita sono le virgolette (usando la doppia citazione).

string SQL = @"Use test 
    alter table BarFoo alter column CouponName nvarchar(328) 
    alter table Foo alter column IngredientName nvarchar(328) 
    alter table Bar alter column IngredientShortDescription nvarchar(328) 
    alter table FooBar alter column ItemName nvarchar(328)"; 
1

Sembra che si sta tentando di imitare il comportamento di un verbatim string in C#. Questi valori letterali iniziano con un leadin @ prima della stringa per consentire al compilatore di non elaborare i caratteri di escape. L'unica fuga di caratteri di cui hai bisogno è di scappare a " con "".

Quindi la query sarà simile

string query = @" 
Use test 

alter table BarFoo alter column CouponName nvarchar(328) 
alter table Foo alter column IngredientName nvarchar(328) 
alter table Bar alter column IngredientShortDescription nvarchar(328) 
alter table FooBar alter column ItemName nvarchar(328)"; 

Questo include i caratteri di nuova riga \n così come qualsiasi spaziatura leader. In SQL lo spazio bianco è comunque solo di leggibilità, ma è bene ricordare che lo spazio bianco è completamente preservato con questi letterali.

1

First - Utilizzare multilinea stringhe letterali come

String sql = @"Use test 
alter table BarFoo alter column CouponName nvarchar(328) 
alter table Foo alter column IngredientName nvarchar(328) 
alter table Bar alter column IngredientShortDescription nvarchar(328) 
alter table FooBar alter column ItemName nvarchar(328)" 
  • nota che tutte le interruzioni di riga all'interno della stringa e spazi bianchi all'inizio di ogni riga viene mantenuta


Secondo: let stringa di interpolazione lavoro per voi se avete bisogno di qualsiasi parametrizzazione di stringa:

String databaseName = "test" 
String tableName = "BarFoo" 

String sql = @"Use \{databaseName} 
alter table \{tablaName} alter column CouponName nvarchar(328)" 
  • non più puzzle come String.Format("Use {0}; alter table {1}", databaseName, tableName)


Terzo - Visual Basic è già stringa multilinea letterali, anche. Non più soluzioni alternative XML per favore.
In VB, utilizzare

Dim sql As String = "Use test 

alter table BarFoo alter column CouponName nvarchar(328) 
alter table Foo alter column IngredientName nvarchar(328) 
alter table Bar alter column IngredientShortDescription nvarchar(328) 
alter table FooBar alter column ItemName nvarchar(328)" 

'and with interpolated strings: 
Dim when As String = "since Visual Studio 2015" 
Dim note As String = $"String interpolation works {when}, see this VB-specific syntax!"