Как использовать тип данных даты в MS Access или SQL Server при использовании соединения ODBC - PullRequest
0 голосов
/ 28 августа 2018

У меня есть программа на C #, которая подключается к базе данных, используя DSN (драйвер ODBC).

Все запросы, которые я запускаю в программе, используют SQL. Все работает хорошо, но при использовании типа данных datetime в запросах (в операторе SELECT или в предложении WHERE).

Когда DSN является базой данных MS ACCESS, я должен использовать что-то вроде этого:

WHERE SomeDate = #1/1/2005#

Но если та же база данных находится в SQL Server, я должен использовать что-то вроде этого:

WHERE SomeDate = '1/1/2005' 

Есть ли способ управлять этим в одной и той же программе, не выполняя процедуру для SQL Server и другую для MS ACCESS?

Я попытался получить свойства объекта OdbcConnection, но не смог найти способ определить, является ли драйвер MS Access или SQL Server.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Возможно, вы использовали тип данных Datetime2 в SQL Server. Это будет читаться как текст, если используется собственный драйвер SQL Server ODBC.

Так что либо:

  1. Используйте Microsoft® ODBC Driver 11 для SQL Server® - или новее, 17 является текущим:

Microsoft® ODBC-драйвер 17 для SQL Server®

  1. Измените тип данных поля на DateTime
0 голосов
/ 28 августа 2018

Вы можете установить базу данных Access в режим ANSI-92. Это позволит вам запрашивать поля даты с одинарными кавычками.

Слово предупреждения, хотя, если это существующая база данных или другие приложения используют ее. Это может привести к серьезным изменениям в любых существующих запросах в вашей базе данных, которые не соответствуют ANSI. Аналогично, если есть другие приложения, использующие эту базу данных, их запросы также могут прерваться.

Также в качестве альтернативы обратите внимание, что OdbcConnection имеет свойство Driver, которое вы можете проверить, чтобы определить источник данных. На моем компьютере DSN, указывающий на базу данных SQL Server, возвращает sqlncli11.dll, потому что я использую собственный клиент SQL Server 11.0. Вы можете использовать это свойство для управления синтаксисом ваших запросов в вашем приложении. Вы можете создать слой доступа к данным, который абстрагирует часть этого от остального кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...