2012-05-04 83 views
6

我有一個csv,我需要解析成vb.net中的gridview。如果我做SELECT *,我會得到沒有問題的數據。但是,我處於需要引用實際列名稱的情況。問題是,我無法控制生成csv的應用程序,並且它們使列名稱被括在方括號中。如何查詢包含方括號的列名?

如何赫克我可以做這樣的事情:

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

,所以我得到的數據的迴歸?

因此,爲了完全清楚:我有一個應用程序,它在名爲myTable的表中創建一個帶有列標題[名稱]和[高度]的csv,並且對於我來說我無法圖瞭解如何特別返回[name]和[height]。

回答

11

如果列名具有方括號,那麼您可以使用雙引號環繞列名稱。以下示例在SQL Server中進行了測試。

腳本

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

查詢所有列

SELECT * FROM dbo.myTable 

只查詢特定的列

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

VB.NET代碼 - 示例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代碼 - 示例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尼斯使用的String.Format –

2

我正在做的假設,這是SQL Server。

包含]字符的對象應該用[]引用。

爲下表:

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

您可以使用它選擇:

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

如果您正在尋找T-SQL中的方式引用對象名稱,你可以使用QUOTENAME。

SELECT QUOTENAME('t]') 

在SQL Server中,您還可以使用雙引號引用對象名稱;但是,您需要驗證兩件事情。

首先,您需要確保您啓用了QUOTED_IDENTIFIER。有些驅動程序會自動爲你安裝。

SET QUOTED_IDENTIFIER ON 

第二個認爲你需要做的是確保你在對象名稱中使用其他雙引號。從T-SQL開始,QUOTENAME再次成爲救援。

SELECT QUOTENAME('t"]') 

"t""]" 

在VB.Net你想要做的事,如:

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

QUOTENAME函數的往往是關鍵! – Spi