SQLDataReader не показывает значение столбца с двойным двоеточием в имени поля - PullRequest
0 голосов
/ 25 мая 2019

A Select запрос работает нормально, когда я ввожу его в SQL Server Management Studio на SQL Server:

SELECT [00:00] 
FROM MY_TABLE 
WHERE whatevercondition ...

Имя столбца «00:00» - у него двойное двоеточие.Когда я пытаюсь получить значение из этого столбца в функции VB.net с помощью SqlDataReader, результатом всегда является ошибка:

Столбец не существует

Я пытался ввести имя столбца во всех вариантах скобок, кавычек, без скобок и т. Д. Я все еще не могу получить значение в таблице.

Мой код VB.NET:

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

Как правильно указывать / экранировать имя столбца, чтобы оно работало в SqlDataReader?

Ответы [ 2 ]

2 голосов
/ 25 мая 2019

Это:

TheField = "[00:00]"
SQLTemp = "SELECT " & TheField & " FROM MY_TABLE WHERE whatevercondition ..."

должно быть

TheField = "00:00"
SQLTemp = "SELECT [" & TheField.Replace("]", "]]") & "] FROM MY_TABLE WHERE whatevercondition ..."

Имя 00:00. Не [00:00]. Это идентификатор с разделителями , а [ и ] присутствуют только в TSQL и позволяют анализатору определять, где имя начинается и заканчивается, когда имя не соответствует правилам для обычных идентификаторов. .

0 голосов
/ 25 мая 2019

Попробуйте использовать порядковый индекс столбца, а не имя столбца.

Вот так, используя 0 для первого столбца в вашем SELECT утверждении:

result = Counter_Table.Rows(0)(0).ToString()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...