|
Можно в ADO при использовании MSOLEDBSQL явно указывать тип SQLSever в параметрах запроса?
|
|||
---|---|---|---|
#18+
Приветствую! 1. По совету коллег разбираюсь с провайдером MSOLEDBSQL (на замену SQLOLEDB). В тестовых примерах он реально быстрее на мелких запросах. Но в рабочей базе есть проблемы с датами, которые хочу решить (залатать) на переходный период. 2. Что делаю:
Код: sql 1.
3. Вопрос: есть ли возможность сказать ADO (или провайдеру MSOLEDBSQL), чтобы вместо типа date она использовала тип datetime (или smalldatetime)? Причем, в ходе работы программы в обновленных местах нужно date, в старых местах datetime. Т.е. прибить гвоздями один раз на всё время работы программы нельзя - надо иметь возможность это настраивать. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 23:48 |
|
Можно в ADO при использовании MSOLEDBSQL явно указывать тип SQLSever в параметрах запроса?
|
|||
---|---|---|---|
#18+
Dimitry Timokhov, Непонятная проблема. Нужен datetime, используйте datetime: Код: sql 1.
Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 08:08 |
|
Можно в ADO при использовании MSOLEDBSQL явно указывать тип SQLSever в параметрах запроса?
|
|||
---|---|---|---|
#18+
a_voronin Непонятная проблема. Нужен datetime, используйте datetime: Тем более, если надо: Dimitry Timokhov Причем, в ходе работы программы в обновленных местах нужно date, в старых местах datetime. Т.е. прибить гвоздями один раз на всё время работы программы нельзя - надо иметь возможность это настраивать Не может же быть в MSOLEDBSQL настройки "Тип данных для старых мест". ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 09:00 |
|
Можно в ADO при использовании MSOLEDBSQL явно указывать тип SQLSever в параметрах запроса?
|
|||
---|---|---|---|
#18+
Dimitry Timokhov, на время переходного периода должны использовать оба типа запроса - старого образца и нового. Придумайте селектор. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 11:11 |
|
Можно в ADO при использовании MSOLEDBSQL явно указывать тип SQLSever в параметрах запроса?
|
|||
---|---|---|---|
#18+
Dimitry Timokhov, ... и поищите книги о рефакторинге SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 11:11 |
|
Можно в ADO при использовании MSOLEDBSQL явно указывать тип SQLSever в параметрах запроса?
|
|||
---|---|---|---|
#18+
a_voronin Dimitry Timokhov, Непонятная проблема. Нужен datetime, используйте datetime: Код: sql 1.
Код: sql 1.
Почему же непонятная? 1. Сразу насчет каста в запросе. Это понятно, что можно. Забыл сказать, что менять запрос не хотелось бы. Мне было бы достаточно нужный мне тип datetime рядом с @P1 во втором параметре sp_executesql. 2. Дабы пояснить лучше ситуацию, приведу пример. Пример на дельфи, но он либы от дельфи не использует - все на позднем связывании прямо через OLE. Примерно это будет написано в любом языке. Суть примера: для провайдеров SQLOLEDB и MSOLEDBSQL, для двух методов добавления параметров в ADO.Command, для четырех типов дат делает тривиальный запрос с параметром типа дата. NB Можно выполнять на любой БД - ничего в БД не меняет. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
Посмотрите, какая интересная выдача получается (к моему вопросу не относится, просто интересный и для меня необъяснимый факт): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Т.е. SQLOLEDB для любого способа добавления параметра (метод 1: сразу передавать параметры в ADO.Command.Execute; метод 2: сначала параметр добавить в ADO.Command.Parameters, а в ADO.Command.Execute ничего не передавать) параметр имеет тип datetime. Для MSOLEDBSQL параметры для метода 1 и 2 различаются!!! Интересный факт. Что бы это значило? Вернусь к исходному вопросу . Хотелось бы, чтобы я мог настраивать, чтобы MSOLEDBSQL также как SQLOLEDB использовал тип datetime рядом с @P1 во втором параметре sp_executesql. Можно управлять тем, какой тип параметра будет использовать ADO? PS Для справки. Запрос select @@version дает: Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:27 |
|
Можно в ADO при использовании MSOLEDBSQL явно указывать тип SQLSever в параметрах запроса?
|
|||
---|---|---|---|
#18+
Dimitry Timokhov, Коллеги, похоже, я нашел почти то, что искал. Не вышло в каждом конкретном случае настраивать тип во втором параметре в sp_executesql. Но хотя бы можно какое-то время пожить с новым провайдером без переписки существующего кода. Весь секрет в добавке в ADODB.Connection.ConnectionString опции DataTypeCompatibility=80. Тогда второй параметр sp_executesql для типа ADODB.adDate будет равен datetime. PS Вся проблема в том, что наша БД, исходно реализована на SQL2000. А там не было типа date. Почему-то (не знаю, почему) для дат (а нам нужны только даты, без времени) был использован int. Тип int совместим в datetime и smalldatetime, но не совместим в date (который появился позднее). Понятно, что нужно переходить на date. Но это не сразу, нужен переходный период. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2019, 04:04 |
|
|
start [/forum/topic.php?fid=46&fpage=76&tid=1686790]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 344ms |
total: | 481ms |
0 / 0 |