如何查询包含方括号的列名?

时间:2012-05-04 18:56:34

标签: sql vb.net

我有一个csv,我需要在vb.net中解析为gridview。如果我做SELECT *,我会毫无问题地得到数据。但是,我需要引用实际的列名称。问题是,我无法控制生成csv的应用程序,并且它们将列名括在方括号中。

我怎么能这样做:

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

所以我得到了数据返回?

所以,为了非常清楚:我有一个应用程序,在名为myTable的表中创建一个带有列标题[name]和[height]的csv,对于我的生活,我无法弄清楚如何具体返回[name]和[height]。

2 个答案:

答案 0 :(得分:14)

如果列名具有方括号,则可以使用双引号来包围列名。下面的示例在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)

我假设这是针对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, """", """"""))