2012-05-04 35 views
6

Tôi có một csv mà tôi cần phải phân tích thành một GridView trong vb.net. Nếu tôi chọn SELECT *, tôi sẽ nhận được dữ liệu mà không có vấn đề gì. Tuy nhiên, tôi đang ở trong một tình huống mà tôi cần phải tham khảo các tên cột thực tế. Và vấn đề là, tôi không có quyền kiểm soát đối với ứng dụng tạo ra csv, và chúng làm cho các tên cột được đặt trong dấu ngoặc vuông.Làm cách nào để truy vấn các tên cột chứa dấu ngoặc vuông?

Làm thế nào heck tôi có thể làm một cái gì đó như thế này:

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

vì vậy tôi có được sự trở lại của dữ liệu? Vì vậy, trong một nỗ lực để được hoàn toàn rõ ràng: Tôi có một ứng dụng tạo ra một csv với các tiêu đề cột [tên] và [chiều cao] trong một bảng gọi là myTable, và cho cuộc sống của tôi, tôi không thể hình cách trả lại [name] và [height] một cách cụ thể.

Trả lời

11

Nếu tên cột có dấu ngoặc vuông, thì bạn có thể sử dụng dấu ngoặc kép để bao quanh các tên cột. Dưới đây mẫu đã được thử nghiệm trong SQL Server.

Script:

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

Truy vấn tất cả các cột:

SELECT * FROM dbo.myTable 

Truy vấn chỉ cột cụ thể:

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

VB.NET Code - Mẫu 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 Code - Mẫu 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 đẹp sử dụng String.Format –

2

Tôi đang làm cho giả định rằng đây là cho SQL Server.

Đối tượng chứa ký tự] phải được trích dẫn bằng [].

Đối với bảng sau:

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

Bạn có thể chọn từ nó bằng cách sử:

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

Nếu bạn đang tìm kiếm một cách trong T-SQL để trích dẫn tên đối tượng, bạn có thể sử dụng QUOTENAME.

SELECT QUOTENAME('t]') 

Trong SQL Server, bạn cũng có thể sử dụng dấu ngoặc kép cho tên đối tượng báo giá; tuy nhiên, có hai điều bạn cần phải xác thực.

Trước tiên, bạn cần đảm bảo rằng bạn đã bật QUOTED_IDENTIFIER. Một số trình điều khiển sẽ được điều này cho bạn tự động.

SET QUOTED_IDENTIFIER ON 

Điều thứ hai bạn cần làm là đảm bảo thoát khỏi bất kỳ dấu ngoặc kép nào khác trong tên đối tượng của bạn. Từ T-SQL, QUOTENAME lại xuất hiện để giải cứu.

SELECT QUOTENAME('t"]') 

"t""]" 

Trong VB.Net bạn muốn làm điều gì đó như:

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

chức năng QUOTENAME thường là chìa khóa! – Spi

Các vấn đề liên quan