2012-05-04 14 views
6

Tengo un csv que tengo que analizar en un gridview en vb.net. Si selecciono *, obtengo los datos sin problema. Sin embargo, estoy en una situación en la que necesito hacer referencia a los nombres reales de las columnas. Y el problema es que no tengo ningún control sobre la aplicación que genera el csv, y hacen los nombres de columna entre corchetes.¿Cómo su búsqueda nombres de las columnas que contienen corchetes?

¿Cómo diablos puedo hacer algo como esto:

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

por lo que obtener un retorno de los datos?

Por lo tanto, en un esfuerzo por ser perfectamente claro: Tengo una aplicación que crea un csv con los encabezados de columna [nombre] y [altura] en una tabla llamada myTable, y por mi vida no puedo entender cómo devolver [nombre] y [altura] específicamente.

Respuesta

11

Si los nombres de las columnas tienen corchetes, a continuación, puede utilizar comillas dobles para envolver alrededor de los nombres de columna. La muestra siguiente se probó en SQL Server.

de secuencias de comandos:

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

Consulta de todas las columnas:

SELECT * FROM dbo.myTable 

Consulta de sólo las columnas específicas:

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

Código VB.NET - Muestra 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) 

Código VB.NET - Muestra 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 buen uso de String.Format –

2

estoy haciendo la suposición de que esto es para SQL Server.

Los objetos que contengan el carácter] deben ser citados con [].

Para la siguiente tabla:

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

Se pueden seleccionar de ella usando:

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

Si usted está buscando una manera dentro de T-SQL para citar los nombres de objetos, puede utilizar QUOTENAME.

SELECT QUOTENAME('t]') 

Dentro de SQL Server, también se puede utilizar comillas para citar los nombres de objetos; Sin embargo, hay dos cosas que necesita validar.

En primer lugar que necesita para asegurarse de que ha habilitado QUOTED. Algunos controladores serán esto para usted automáticamente.

SET QUOTED_IDENTIFIER ON 

La segunda cosa que debe hacer es asegurarse de no encontrar ninguna otra comilla doble en su nombre de objeto. Desde T-SQL, QUOTENAME vuelve al rescate.

SELECT QUOTENAME('t"]') 

"t""]" 

en VB.Net que te gustaría hacer algo como:

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

función QUOTENAME es a menudo la clave! – Spi

Cuestiones relacionadas