2012-05-04 9 views
6

Ho un csv che ho bisogno di analizzare in una griglia in vb.net. Se faccio SELECT *, ottengo i dati senza problemi. Tuttavia, mi trovo in una situazione in cui devo fare riferimento ai nomi effettivi delle colonne. E il problema è che non ho alcun controllo sull'app che genera il csv e fanno i nomi delle colonne racchiusi tra parentesi quadre.Come faccio a interrogare i nomi di colonna che contengono parentesi quadre?

Come diavolo posso fare qualcosa di simile:

Dim cmdSelect As New OleDbCommand(SELECT "[name], [height] FROM myTable") 

in modo da ottenere un ritorno di dati?

Quindi, nel tentativo di essere perfettamente chiaro: ho un'app che crea un csv con le intestazioni di colonna [nome] e [altezza] in una tabella chiamata myTable, e per la vita di me non riesco a capire fuori come restituire [nome] e [altezza] in modo specifico.

risposta

11

Se i nomi delle colonne hanno parentesi quadre, è possibile utilizzare le virgolette per racchiudere i nomi delle colonne. Sotto l'esempio è stato testato in SQL Server.

Script:

CREATE TABLE dbo.myTable 
(
     "[name]" varchar(max) not null 
    , "[height]" int not null 
); 

Interrogazione tutte le colonne:

SELECT * FROM dbo.myTable 

Interrogazione solo colonne specifiche:

SELECT "[name]", "[height]" FROM dbo.myTable 

Codice VB.NET - Esempio 1:

Dim query As String = String.Format("SELECT {0}{1}{0}, {0}{2}{0} FROM dbo.myTable", """", "[name]", "[height]") 
Dim cmdSelect As New OleDbCommand(query) 

VB.NET Code - Campione 2:

Dim query As String = String.Format("SELECT {0}[name]{0}, {0}[height]{0} FROM dbo.myTable", """") 
Dim cmdSelect As New OleDbCommand(query) 
+1

+1 Nizza uso di String.Format –

2

Sto facendo l'ipotesi che questo è per SQL Server.

Gli oggetti che contengono il carattere] devono essere citati utilizzando [].

Per la seguente tabella:

CREATE TABLE [t]]] (
    [i]]d] int primary key, 
    [da]]]ta] int 
) 

È possibile scegliere tra utilizzando:

SELECT [da]]ta], [i]]d] FROM [t]]] 

Se siete alla ricerca di un modo all'interno di T-SQL per citare i nomi degli oggetti, è possibile utilizzare QUOTENAME.

SELECT QUOTENAME('t]') 

In SQL Server, è anche possibile utilizzare virgolette per citare nomi di oggetti; tuttavia, ci sono due cose che devi convalidare.

Per prima cosa è necessario assicurarsi di aver abilitato QUOTED_IDENTIFIER. Alcuni driver saranno questo automaticamente per te.

SET QUOTED_IDENTIFIER ON 

La seconda cosa che devi fare, è assicurarti di evitare qualsiasi altra virgoletta nel nome dell'oggetto. Da T-SQL, QUOTENAME viene di nuovo in soccorso.

SELECT QUOTENAME('t"]') 

"t""]" 

In VB.Net che ci si vuole fare qualcosa di simile:

dim queryStr As String = String.Format("SELECT ""{1}"" FROM dbo.myTable", String.Replace(col1, """", """""")) 
+0

funzione QUOTENAME è spesso la chiave! – Spi

Problemi correlati