12

我有一个 csv,我需要将其解析为 vb.net 中的 gridview。如果我选择 *,我会毫无问题地获得数据。但是,我处于需要引用实际列名的情况。问题是,我无法控制生成 csv 的应用程序,它们将列名括在方括号中。

我怎么能做这样的事情:

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

所以我得到数据的回报?

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

4

2 回答 2

16

如果列名带有方括号,则可以使用双引号将列名括起来。下面的示例在 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)
于 2012-05-04T19:02:27.843 回答
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, """", """"""))
于 2012-05-04T21:44:21.613 回答