На чтение 3 мин. Просмотров 2.4k. Опубликовано 03.09.2019
ODBC весьма полезен для процедур доступа к приложениям, особенно для профессиональных пользователей. И, похоже, существует множество проблем для пользователей Windows 10, которые либо перешли с Windows 7, либо обновили свою версию Windows 10 до последней версии.
Если вы один из них и у вас есть определенные проблемы с ODBC в Windows 10, проверьте решения ниже.
Содержание
- Как исправить проблемы ODBC в Windows 10
- Решение 1. Удалите SMBv1 и включите SMBv2/SMBv3)
- Решение 2. Проверьте брандмауэр Windows и Защитник Windows
- Решение 3 – Обновление драйверов
- Решение 4 – Откат к предыдущей версии Windows
Как исправить проблемы ODBC в Windows 10
- Удалить SMBv1 и включить SMBv2/SMBv3)
- Проверьте брандмауэр Windows и Защитник Windows
- Обновление драйверов
- Откат к предыдущей версии Windows
Решение 1. Удалите SMBv1 и включите SMBv2/SMBv3)
Некоторые пользователи решили проблему, отключив SMBv1 и включив SMBv2 или SMBv3. Это можно сделать различными способами, начиная с PowerShell или редактора реестра. Последний способ быстрее и проще, но может негативно повлиять на ваш компьютер при неправильном использовании. Поэтому, прежде чем выполнять следующие шаги, обязательно сделайте резервную копию вашего реестра.
Вот как отключить SMBv1 и включить SMBv2/SMBv3:
- В строке поиска Windows введите regedit и откройте редактор реестра.
-
Перейдите в ComputerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters .
- Щелкните правой кнопкой мыши пустое пространство и создайте новый Dword, назовите его SMB1 и установите его значение равным 0.
- Щелкните правой кнопкой мыши на пустом месте и создайте новый Dword, назовите его SMB2 и установите его значение равным 1.
- Закройте редактор реестра и перезагрузите компьютер.
Сделайте это на каждой уязвимой машине и не забудьте перезагрузить ее, чтобы изменения вступили в силу.
- ЧИТАЙТЕ ТАКЖЕ: отключите SMBv1 в Windows с помощью этих быстрых методов
Решение 2. Проверьте брандмауэр Windows и Защитник Windows
Некоторым пользователям удалось решить проблему, просто добавив белый список или временно отключив брандмауэр Windows и включив Защитник Windows. Это долгосрочное решение, но оно того стоит. Если у вас уже есть сторонний антивирус, попробуйте объединить его с нативным антивирусом.
После этого перезагрузите компьютер и попробуйте снова получить доступ к приложению ODBC.
Решение 3 – Обновление драйверов
В случае, если вы используете 32-битный Office на 64-битной машине через ODBC, вам потребуется некоторая перенастройка, чтобы избежать ошибок драйвера. Или, скорее, доступ к версии ODBC32 вместо стандартной 64-битной версии, представленной в архитектуре x64.
Вот где его найти и как его запустить:
- Перейдите к C: WindowssysWOW64odbcad32.exe и запустите его. Это 32-битный администратор источника данных ODBC.
-
Попробуйте применить драйверы снова.
- После того, как вы применили драйверы, перезагрузите компьютер.
Решение 4 – Откат к предыдущей версии Windows
Как говорили многие из затронутых пользователей, проблема возникла после того, как они обновили Windows 10 до версии 1803. То же самое можно применить к 1809. И вместо того, чтобы ждать, пока Microsoft решит проблемы ODBC в их текущем выпуске, мы скорее предлагаем откат до предыдущей версии, где сервис был полностью функциональным.
- Читайте также: исправлено: синий экран после отката Windows 10
Вот как перейти к предыдущей версии Windows 10:
- Откройте Настройки .
- Выберите Обновление и безопасность .
- Выберите Восстановление на левой панели.
-
Нажмите « Вернуться к предыдущей версии Windows 10 ».
- Нажмите Начало работы и следуйте инструкциям.
- Remove From My Forums
-
Вопрос
-
Пользуюсь Visual Studio 2017 Community (последняя версия)
По умолчанию проект создается на платформе 4.6.1
Если изменить платформу на любую другую, то класс OdbcConnection перестает подключатся к базам.
При вызове метода Open() получаем следующее сообщение
System.Data.Odbc.OdbcException произошло
HResult=0x80131937
Сообщение = ERROR [IM002] [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
Источник =
Трассировка стека:
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.Odbc.OdbcConnection.Open()
at KURSConsoleApp.WorkDBF.Execute(String Command) in C:Usersmaa91OneDriveDocumentsVisual Studio 2017ProjectsVkursConsoleKURSConsoleAppWorkDBF.cs:line 49Даже если вернуть платформу обратно на 4.6.1, то все равно подключение не работает.
Лечится только созданием нового проекта, но мне необходимо использовать мой проект на платформе 3.5
Я считаю что это баг.
Класс для работы с базой
using System; using System.Data; using System.Data.Odbc; namespace KURSConsoleApp { internal class WorkDBF { /// <summary> /// Подключение к источнику данных /// </summary> private OdbcConnection Conn = null; private DataSet dataset = null; /// <summary> /// Подключение к файлу /// </summary> /// <param name="t">Путь к файлу (Директория расположения файла)</param> public WorkDBF(string t) { //OdbcConnectionStringBuilder StringBilder = new OdbcConnectionStringBuilder(); //StringBilder.Driver = "Microsoft dBASE Driver (*.dbf)"; //StringBilder.Add("dbq", t); //StringBilder.Add("encoding", "ANSI"); Conn = new OdbcConnection { ConnectionString = @"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" + t + "; encoding=ANSI" }; dataset = new DataSet(); } /// <summary> /// Выполнение команды SQL /// </summary> /// <param name="Command">SQL код</param> /// <returns></returns> public DataTable Execute(string Command) { DataTable dt = null; if (Conn != null) { try { Conn.Open(); dt = new DataTable(); OdbcCommand oCmd = Conn.CreateCommand(); oCmd.CommandText = Command; dt.Load(oCmd.ExecuteReader()); Conn.Close(); } catch (Exception) { } } return dt; } /// <summary> /// Выполняет добавление одной строки /// </summary> /// <param name="Command">SQL команда добавления</param> public bool Insert(string Command) { bool result = true; Conn.Open(); OdbcCommand oCmd = Conn.CreateCommand(); oCmd.CommandText = Command; oCmd.ExecuteNonQuery(); Conn.Close(); return result; } /// <summary> /// Загрузка всех колонок /// </summary> /// <param name="DB_path">Путь</param> /// <returns></returns> public DataTable GetAll(string DB_path) { return Execute("SELECT * FROM " + DB_path); } /// <summary> /// Получает количество строк в базе /// </summary> /// <returns></returns> public long Limitrows(string DB_path) { try { long lim = 0; DataTable tempTable = Execute("SELECT count(*) as count FROM " + DB_path); lim = Convert.ToInt64(tempTable.Rows[0]["count"].ToString()); tempTable.Dispose(); return lim; } catch (Exception) { throw; } } } }
Ответы
-
Ну как я и предполагал — 32 бит работает, 64 бит — нет. Установите в настройках проекта что он 32 битный (х86).
This posting is provided «AS IS» with no warranties, and confers no rights.
-
Помечено в качестве ответа
22 августа 2017 г. 0:42
-
Помечено в качестве ответа
I am trying to open a program for the first time on Windows XP Pro that uses PostgreSQL 9. I’m getting an error message that says :
A problem was encountered while trying to log into or create the
production database. Details: [Microsoft][ODBC Driver Manager] Data
source name not found and no default driver specified
In my ODBC manager, I have a list of User DSN’s and System DSN’s. I tried installing a postgres odbc driver to see if that would help, but it didn’t.
There is a connect.dat file in the program file with a line saying «OLE DB Provider = MSDASQL». Changing this entry alters the error message I get to «Provider cannot be found, it may not be properly installed».
I don’t know what provider name to insert to get this to work properly. I have done extensive research on this error to no avail. Any suggestions would be greatly appreciated.
pnuts
57.7k11 gold badges85 silver badges137 bronze badges
asked Jun 14, 2013 at 19:08
3
Got this error because I had the Data Source Name in User DSN instead of System DSN

![]()
Jan Doggen
8,68313 gold badges69 silver badges140 bronze badges
answered Jan 17, 2017 at 17:39
NickNick
3,1074 gold badges29 silver badges42 bronze badges
2
-
In reference to the error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.
That error means that the Data Source Name (DSN) you are specifying in your connection configuration is not being found in the windows registry.
-
It is important that your ODBC driver’s executable and linking format (ELF) is the same as your application. In other words, you need a 32-bit driver for a 32-bit application or a 64-bit driver for a 64-bit application.
If these do not match, it is possible to configure a DSN for a 32-bit driver and when you attempt to use that DSN in a 64-bit application, the DSN won’t be found because the registry holds DSN information in different places depending on ELF (32-bit versus 64-bit).
Be sure you are using the correct ODBC Administrator tool. On 32-bit and 64-bit Windows, the default ODBC Administrator tool is in
c:WindowsSystem32odbcad32.exe. However, on a 64-bit Windows machine, the default is the 64-bit version. If you need to use the 32-bit ODBC Administrator tool on a 64-bit Windows system, you will need to run the one found here:C:WindowsSysWOW64odbcad32.exeWhere I see this tripping people up is when a user uses the default 64-bit ODBC Administrator to configure a DSN; thinking it is for a 32-bit DSN. Then when the 32-bit application attempts to connect using that DSN, «Data source not found…» occurs.
-
It’s also important to make sure the spelling of the DSN matches that of the configured DSN in the ODBC Administrator. One letter wrong is all it takes for a DSN to be mismatched.
Here is an article that may provide some additional details
It may not be the same product brand that you have, however; it is a generic problem that is encountered when using ODBC data source names.
-
-
In reference to the OLE DB Provider portion of your question, it appears to be a similar type of problem where the application is not able to locate the configuration for the specified provider.
TallTed
8,9042 gold badges21 silver badges36 bronze badges
answered Aug 21, 2014 at 14:11
![]()
PRGSTonyPRGSTony
9277 silver badges7 bronze badges
1
The Problem might be from the driver name for example instead of DRIVER={MySQL ODBC 5.3 Driver} try DRIVER={MySQL ODBC 5.3 Unicode Driver} you can see the name of the driver from administration tool
answered May 20, 2017 at 8:42
MeysamMeysam
1711 silver badge2 bronze badges
1
In my case, it was working in x86 but not in x64.
It quite ridiculous, but in x64 the following change had to be added before it would work:
x86 -> szDsn = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};
x64 -> szDsn = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb, *.accdb)};
Note the addition of *.accdb.
Jeremy Caney
6,79353 gold badges48 silver badges74 bronze badges
answered May 28, 2020 at 12:11
![]()
Tomasz KotTomasz Kot
1832 silver badges7 bronze badges
2
if you are using IIS, maybe you should try
«application pools» —> «DefaultAppPool» —> «application pools default value»
—> «32-Bit-application-activ» —> set false
answered Apr 16, 2019 at 12:27
![]()
leslieleslie
611 silver badge2 bronze badges
Check the exact driver name in the ODBC Administrator tool. Press Windows key + R and then:
C:WindowsSystem32odbcad32.exeon 32-bit systemsC:WindowsSysWOW64odbcad32.exeon 64-bit systems
In my case it should have been Microsoft Access Driver (*.mdb, *.accdb) instead of Microsoft Access Driver (*.mdb).
answered Oct 13, 2020 at 17:37
![]()
Robin DinseRobin Dinse
1,46114 silver badges20 bronze badges
I got this with data driven tests using:
Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
The problem is the above driver only is 32 bit. I had switched visual studio testsettings file to 64 bit to test a 64-bit-only application.
Switching back to 32 bit in the testsettings file fixed the issue.
using a test settings file
answered Jan 27, 2018 at 0:36
![]()
N-ateN-ate
5,5662 gold badges39 silver badges46 bronze badges
For me the below worked:
- Add the linked server as a System DSN (ODBC System Source Administration) e.g. with name -> TEST_NAME

- Use as data source the TEST_NAME

answered Sep 8, 2021 at 11:41
![]()
gmavridakisgmavridakis
3084 silver badges12 bronze badges
This was not the first time I have come to this page searching for the same error message. Unfortunately, Microsoft error messages are vague and often several different issues will cause the same error message, hence why there are so many answers here.
I will propose another solution in case this helps anyone else.
Under Excel Datasource settings I use the following connection string:
"ODBC;DSN=jg_report;Trusted_Connection=Yes;"
The problem is that when I am opening an ADODB connection in VBA, and I use this same string, it will produce the «[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified» error.
To correct the connection string, I simply have to remove the «ODBC;» as follows:
"DSN=jg_report;Trusted_Connection=Yes;"
The connection then works as expected without producing errors.
answered Aug 4, 2022 at 20:29
![]()
I tried the above but found my issue was I used a | in the name of the DSN (I have multipled ODBC connectors — one for each DB — to make sure I don’t comingle data)
I replaced the | (pipe) with a _ and all now works fine.
I was trying to call SQL Server from Alteryx.
answered Jul 12, 2018 at 4:13
calepcalep
262 bronze badges
answered Jan 3 at 10:20
Build SucceededBuild Succeeded
1,1531 gold badge9 silver badges24 bronze badges
Пересказ статьи Rayis Imayev. Error [IM002] [Microsoft][ODBC Driver Manager] «Data source name not found and no default driver specified» and who do you trust?
Это очень короткий пост, просто чтобы напомнить себе, но, если вы когда-либо пытались подключиться к базе данных PostgreSQL с помощью интерфейса ODBC (знаю, что это уже звучит, как очень интересный вызов), то могли столкнуться с таким сообщением об ошибке: “ERROR [IM002] [Microsoft][ODBC Driver Manager] Источник данных не найден и не указан драйвер по умолчанию.”

Я допускаю, что мой поиск онлайн этой ошибки сразу показал ресурсы Microsoft и Stackoverflow, которые только смутили меня и не помогли решить проблему с подключением к ресурсу PostgreSQL через ODBC:
- https://docs.microsoft.com/en-us/answers/questions/227987/34error-im002-microsoftodbc-driver-manager-data-so.html
- https://stackoverflow.com/questions/17115632/microsoftodbc-driver-manager-data-source-name-not-found-and-no-default-drive
Microsoft в своей документации на SSIS дает очень хорошее объяснение, как подключиться к источнику данных PostgreSQL, и даже приводит пример строки подключения с драйвером PostrgreSQL ODBC.
Driver={PostgreSQL ODBC Driver(UNICODE)};Server=<сервер>;Port=<порт>;Database=<база данных>;UID=<ид пользователя>;PWD=<пароль>
Мои попытки воспользоваться этим примером не привели к успеху, я по-прежнему получаю свое сообщение об ошибке: “data source name not found”.
Смущал один момент, и я захотел его проверить. Если посмотреть на список 64- или 32-битных подключений ODBC PostgreSQL, которые я сделал, обнаружилось, что они не согласуются с тем, что я читал в технической статье Microsoft.

Мой список драйверов был другим по сравнению с этой технической статьей, и изменить имена этих драйверов, чтобы они соответствовали “PostgreSQL ODBC Driver(UNICODE)”, было не в моих силах.
Тогда я решил изменить мою строку подключения на такой формат “Driver={PostgreSQL Unicode};Server=<сервер>;Port=<порт>;Database=<база данных>;UID=<ИД пользователя>;PWD=<пароль>” в соответствии со списком драйверов, которые я имел. Я тестировал её с обоими 32- и 64-битными драйверами. И только тогда все заработало, и я смог подключиться к моему экземпляру PostgreSQL. Это не означает, что такое соглашение об именовании будет работать при всех обстоятельствах: драйвер ODBC может быть обновлен до новой версии, или другие факторы могут изменить успешный путь подключения к данным. Это изменчивый мир!
Я все время вспоминаю рекомендации Илона Маска делать требования к бизнесу менее тупыми, поскольку может найтись умный человек, который предоставит вам требования, которые вы не сможете опровергнуть.
Не поймите меня неправильно, я никого не виню. Это просто доказательство того, что доверять — это нормально, но стоит все же проверять и проверять. Еще один урок для меня и не новый. ![]()
Автор не разрешил комментировать эту запись