12

vb.netのグリッドビューに解析する必要があるcsvがあります。SELECT * を実行すると、問題なくデータが取得されます。ただし、実際の列名を参照する必要がある状況にあります。問題は、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

これはSQLServer用であると想定しています。

]文字を含むオブジェクトは、[]を使用して引用符で囲む必要があります。

次の表の場合:

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内では、二重引用符を使用してオブジェクト名を引用することもできます。ただし、検証する必要があるものが2つあります。

まず、QUOTED_IDENTIFIERが有効になっていることを確認する必要があります。一部のドライバーは自動的にこれになります。

SET QUOTED_IDENTIFIER ON

2つ目の考えは、オブジェクト名に含まれる他の二重引用符を必ずエスケープすることです。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 に答える