A Select
query works fine when I enter it in SQL Server Management Studio on SQL Server:
SELECT [00:00]
FROM MY_TABLE
WHERE whatevercondition
The column name is “00:00” – it has a double colon. When I try to get the value from this column in a VB.net function with the help of a SqlDataReader
, the result is always an error:
Column does not exist
I have tried to put the column name in all variations of brackets, quotation marks, without brackets at all etc. I still can not retrieve the value in the table.
My VB.NET code:
Dim Counter_Adapter As New SqlDataAdapter
Dim Counter_Table As New DataTable
Dim Counter_Reader As SqlDataReader
Dim SQLTemp As String
Dim TheField as String
Dim result as String
TheField = "[00:00]"
SQLTemp = "SELECT " & TheField & " FROM MY_TABLE WHERE whatevercondition ..."
Data_CMD_Counter = New SqlCommand(SQLTemp, MyDatabaseConnection)
Counter_Adapter.SelectCommand = Core.Data_CMD_Counter
Counter_Adapter.Fill(Counter_Table)
Counter_Reader = Core.Data_CMD_Counter.ExecuteReader
If Counter_Reader.HasRows = True Then
result = Counter_Table.Rows(0)(TheField).ToString() 'This line causes the error: Column "[00:00]" not included in the table.
Else
End If
How do have to quote/escape the column name correctly so that it works in a SqlDataReader
?
Advertisement
Answer
This:
TheField = "[00:00]"
SQLTemp = "SELECT " & TheField & " FROM MY_TABLE WHERE whatevercondition ..."
should be
TheField = "00:00"
SQLTemp = "SELECT [" & TheField.Replace("]", "]]") & "] FROM MY_TABLE WHERE whatevercondition ..."
The name is 00:00
. Not [00:00]
. This is a delimited identifier and the [
and ]
are only present in TSQL, and enable the parser to tell where the name begins and ends when the name doesn’t follow the rules for regular identifiers.