Диспетчер драйверов odbc ошибка sqlsetconnectattr для драйвера

Симптомы

При попытке установить атрибут подключение подключение ODBC, где пул соединений включен с помощью API-интерфейса ODBC драйвер драйвера ODBC для Microsoft SQL Server, появляется следующее сообщение об ошибке:

IM006 сбой SQLSetConnectAttr драйвер [Microsoft] [Диспетчер драйверов ODBC]

Примечание. В документации драйвера ODBC упоминания, что сообщение является информационное сообщение. Тем не менее сообщение как сообщение об ошибке.

Это может происходить, если выполняются все следующие условия:

  • С помощью API-интерфейса ODBC драйвер помощью SQLConnect создания подключения с именем источника данных (DSN).

  • Одно из свойств источника данных (например, вариант использования ANSI значения NULL, шаблоны и предупреждения ) по умолчанию отключено.

  • Пул соединений включен для дескриптора среды.

  • После открытия подключения с помощью помощью SQLConnect устанавливается атрибут уровня изоляции транзакции подключения.

  • Выполнить транзакцию базы данных.

Временное решение

Чтобы обойти эту проблему, выполните следующие действия.

  1. Отключите параметр для подключения ODBC пула подключений.

    Примечание. Отключение пула подключений может повлиять на производительность приложения.

  2. После фиксации транзакции, не включить параметр auto commit.

  3. Чтобы установите уровень изоляции транзакций перед открытием подключения ODBC.

  4. Используйте соединения вместо получения подключения ODBC DSN.

Решение

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему.

Если исправление доступно для скачивания, имеется раздел «Пакет исправлений доступен для скачивания» в верхней части этой статьи базы знаний. Если этого раздела нет, отправьте запрос в службу технической поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание посетите следующий веб-узел корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В форме «Пакет исправлений доступен для скачивания» отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует. Английская версия данного исправления содержит атрибуты файла (или более поздней версии), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, следует использовать
Часовой пояс вкладка «Дата и время» панели управления.

MDAC 2.7 SP1

Date Time Version Size File name
———————————————————
13-Oct-2002 19:24 90,112 Dahotfix.exe
03-Jul-2003 04:09 2000.81.9031.51 372,736 Sqlsrv32.dll

MDAC 2.8

Date Time Version Size File name
———————————————————
31-Mar-2004 16:44 2000.85.1040.0 24,576 Odbcbcp.dll
31-Mar-2004 16:43 2000.85.1040.0 401,408 Sqlsrv32.dll

Примечание. Список всех доступных исправлений для компонентов MDAC 2.8 щелкните следующий номер статьи базы знаний Майкрософт:

ИСПРАВИТЬ 839801 : исправления для компонентов MDAC 2.8

Статус

Корпорация Майкрософт подтвердила, что это является проблемой в продуктах Майкрософт, перечисленных в разделе «Относится к». Эта ошибка была исправлена в Microsoft Access компонент 2.7 Пакет обновления 1 обновление данных и компоненты доступа к данным MDAC 2.8.

Дополнительные сведения

Возникает проблема, описанное в разделе «Проблема» данной статьи, только при наличии доступа к данным компонента (MDAC) 2.7 на компьютере установлен Пакет обновления 1.

Действия по воспроизведению проблемы

Чтобы воспроизвести проблему, используйте следующий код:

// ODBCTestCase.cpp : Defines the entry point for the console application.//

#include "stdafx.h"
#include "windows.h"
#include "sqlext.h"
#include "sql.h"
#include "stdlib.h"

void GetSQLError();
long InitializeEnvironment();
long Connect(BOOL lbUseDSN);
long Disconnect();
int ExecuteProcedure();

SQLHENV ghEnvironment = NULL;
SQLHDBC ghConnection = NULL;
HSTMT ghStatement = NULL;
/**********************************************
* main
**********************************************/
int main(int argc, char* argv[])
{
BOOL lbTransaction = TRUE;
BOOL lbUseDSN = FALSE;
long lValue =0;

if(argc > 1)
{
if(strcmp(argv[1], "DSN") == 0)
lbUseDSN = TRUE;
if(argc > 2)
{
if(strcmp(argv[2], "TRAN") == 0)
lbTransaction = TRUE;
}
}

if(InitializeEnvironment() == 0)
{
for(long llSub = 0; llSub < 2; llSub++)
{
if(Connect(lbUseDSN) == 0)
{

if(lbTransaction)
SQLSetConnectOption(ghConnection, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF);

//SQLGetConnectAttr(ghConnection,SQL_ATTR_AUTOCOMMIT,&lValue,0,NULL);

ExecuteProcedure();

if(lbTransaction)
{
SQLTransact(ghEnvironment, ghConnection, SQL_COMMIT);

//If you do not call the following, the problem does not occur:
SQLSetConnectOption(ghConnection, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON);

//If you call the following the problem does not occur:
//SQLSetConnectOption(ghConnection, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF);
//SQLGetConnectAttr(ghConnection,SQL_ATTR_AUTOCOMMIT,&lValue,0,NULL);
}

Disconnect();
}
}
SQLFreeHandle(SQL_HANDLE_ENV, ghEnvironment);
}

return 0;
}

/**********************************************
* InitializeEnvironment
**********************************************/
long InitializeEnvironment()
{
if (!SQL_SUCCEEDED(SQLSetEnvAttr(NULL,
SQL_ATTR_CONNECTION_POOLING,
(SQLPOINTER)SQL_CP_ONE_PER_DRIVER,
SQL_IS_INTEGER)))
{
GetSQLError();
return 8;
}

if(!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &ghEnvironment)))
{
GetSQLError();
return 8;
}
if(!SQL_SUCCEEDED(SQLSetEnvAttr(ghEnvironment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC2, SQL_IS_INTEGER)))
{
GetSQLError();
return 8;
}
if (!SQL_SUCCEEDED(SQLSetEnvAttr(ghEnvironment,
SQL_ATTR_CP_MATCH,
(SQLPOINTER) SQL_CP_STRICT_MATCH ,
//(SQLPOINTER) SQL_CP_RELAXED_MATCH ,
SQL_IS_INTEGER)))
{
GetSQLError();
return 8;
}

return 0;
}
/**********************************************
* Connect
**********************************************/
long Connect(BOOL lbUseDSN)
{
SQLCHAR lszOutConnectString[1024];
SQLSMALLINT llReturnLength;
SQLAllocHandle(SQL_HANDLE_DBC, ghEnvironment, &ghConnection);

// If you set the isolation before opening the connection, no error reported.
// Customer cannot set this attribute before opening connection because the object
//is running under COM+, and under COM+ isolation levels automatically are set to serializable
//if(!SQL_SUCCEEDED(::SQLSetConnectAttr(ghConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED , SQL_IS_INTEGER)))
//{
// GetSQLError();
// return 8;
//}

if(lbUseDSN)
{
int iReturn = ::SQLConnect(ghConnection,
(SQLCHAR*)"LocalCPR",
SQL_NTS,
(SQLCHAR*)"sa",
SQL_NTS,
(SQLCHAR*)"password1",
SQL_NTS);
if(!SQL_SUCCEEDED(iReturn))
{
GetSQLError();
return 8;
}
}
else
{
if(!SQL_SUCCEEDED(SQLDriverConnect(ghConnection,
NULL,
(SQLCHAR*)"DSN=LocalCPR;UID=sa;PWD=password1;",
SQL_NTS,
lszOutConnectString,
1024,
&llReturnLength,
SQL_DRIVER_NOPROMPT)))
{
GetSQLError();
return 8;
}
}

SQLAllocStmt(ghConnection, &ghStatement);

//If you set the isolation after you open the connection, you see the problem.
if(!SQL_SUCCEEDED(::SQLSetConnectAttr(ghConnection, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_READ_COMMITTED , SQL_IS_INTEGER)))
{
GetSQLError();
return 8;
}
return 0;
}
/**********************************************
* Disconnect
**********************************************/
long Disconnect()
{
if(ghStatement)
{
if(!SQL_SUCCEEDED(SQLFreeHandle(SQL_HANDLE_STMT, ghStatement)))
{
GetSQLError();
return 8;
}
ghStatement = NULL;
}

if(ghConnection)
{
::SQLDisconnect(ghConnection);

if(!SQL_SUCCEEDED(SQLFreeHandle(SQL_HANDLE_DBC, ghConnection)))
{
GetSQLError();
return 8;
}
ghConnection = NULL;
}
return 0;
}
/**********************************************
* ExecuteProcedure
**********************************************/
int ExecuteProcedure()
{
SQLINTEGER mlIndicator = 0;
SQLRETURN lnSqlRetCd = SQL_SUCCESS;
::SQLFreeStmt(ghStatement, SQL_CLOSE);
::SQLFreeStmt(ghStatement, SQL_UNBIND);

/*****************************************************************/
/* Execute Procedure
/*****************************************************************/
RETCODE llDbRetCd = SQLExecDirect(ghStatement, (SQLCHAR*)"SELECT * From Table1", SQL_NTS);
if((llDbRetCd != SQL_SUCCESS) && (llDbRetCd != SQL_SUCCESS_WITH_INFO))
{
GetSQLError();
return 8;
}

/*****************************************************************/
/* Bind return Value
/*****************************************************************/
char lszReturnBuf[300];
SDWORD lSts;

llDbRetCd = SQLBindCol(ghStatement, 1, SQL_C_TCHAR, &lszReturnBuf, 300, &lSts);

if ((llDbRetCd != SQL_SUCCESS) && (llDbRetCd != SQL_SUCCESS_WITH_INFO))
{
GetSQLError();
return 8;
}

/*****************************************************************/
/* Fetch Result
/*****************************************************************/
llDbRetCd = SQLFetch(ghStatement);
if ((llDbRetCd != SQL_SUCCESS) && (llDbRetCd != SQL_SUCCESS_WITH_INFO))
{
GetSQLError();
return 8;
}

printf("Output Value : %sn",lszReturnBuf);
return 0;
}

/**********************************************
* GetSQLError
**********************************************/
void GetSQLError()
{
long llDbErrCd = 0;
short llRetMsgLen = 0;
char lszSqlErrMsg[255];
char lszSqlMsg[255];

SQLError(ghEnvironment,
ghConnection,
ghStatement,
(SQLCHAR*) lszSqlErrMsg,
&llDbErrCd,
(SQLCHAR*) lszSqlMsg,
255,
&llRetMsgLen);
printf(lszSqlErrMsg);
printf(lszSqlMsg);
}

I’m trying to connect to an Access 2007 database (.accdb) with a .net console application. I setup a System DSN in ODBC Manager.
This is how I’m setting up the connection:

conn = new OdbcConnection();
conn.ConnectionString = "DSN=HU-FU";
conn.Open();

On my development machine it works perfectly, but today I tried to install it on a client machine and I’m getting the following error:

ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed

Anyone has an idea what could be the problem?


Here is the ODBC trace source:

UPSShipmentServ 1454-6f0 ENTER SQLDriverConnectW 
  HDBC                0x00424070
  HWND                0x00000000
  WCHAR *             0x69938B34 [      -3] "****** 0"
  SWORD                       -3 
  WCHAR *             0x69938B34 
  SWORD                       -3 
  SWORD *             0x00000000
  UWORD                        0 <SQL_DRIVER_NOPROMPT>

UPSShipmentServ 1454-6f0 EXIT  SQLDriverConnectW  with return code -1 (SQL_ERROR)
  HDBC                0x00424070
  HWND                0x00000000
  WCHAR *             0x69938B34 [      -3] "****** 0"
  SWORD                       -3 
  WCHAR *             0x69938B34 
  SWORD                       -3 
  SWORD *             0x00000000
  UWORD                        0 <SQL_DRIVER_NOPROMPT>

DIAG [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed (0)

UPSShipmentServ is the name of my app. But this sadly does not mean anything to me…


One more addition to the question. I checked the Access driver’s (ACEODBC.DLL) version on both machines and mine is much newer than the client’s. Could it be the problem? Is there any way to update his driver?

Thanks.

  • Remove From My Forums
  • Question

  • User-1613563713 posted

    I am Building my first ASP.Net login page and I get the following error when I attemptto access a MS Access database file. 

     ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver’s SQLSetConnectAttr failed

    Description:
    An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.Odbc.OdbcException: ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver’s SQLSetConnectAttr failed

    Source Error:

    Line 64:         'Calls Database
    Line 65:         dbconn.ConnectionString = ("DSN=emp401k_dsn")
    Line 66:         dbconn.Open()
    Line 67:         dbcomm = New OdbcCommand(sql, dbconn)
    Line 68:         dbcomm.CommandType = System.Data.CommandType.StoredProcedure



    Source File: C:InetpubwwwrootNewEmployeeWebPagesLogin.aspx.vb    Line:
    66

    Stack Trace:

    [OdbcException: ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed]
       System.Data.Odbc.OdbcConnection.Open()
       NewEmployeeWebPages.Login.ButSignOn_Click(Object sender, EventArgs e) in C:InetpubwwwrootNewEmployeeWebPagesLogin.aspx.vb:66
       System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       System.Web.UI.Page.ProcessRequestMain()
    

    Does anyone have any suggestions on how to correct this error.

    Thank You, Rucadulu

Answers

  • User-116373494 posted

    dbconn.ConnectionString = («DSN=emp401k_dsn») <— this doesn’t look right

    I haven’t used DSN to connect — but I don’t think this is the way to declare it

    Do some research on connectionstrings. try
    www.connectionstrings.com 

    • Marked as answer by

      Thursday, October 7, 2021 12:00 AM

I had this application source and I moved from w7 32 to w7 64. Code is in vb6. It was working well on 32 bit machine, but now get this error. [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed But strange thing is if I compile on 64 bit then .exe runs and connects to oracle with no problem. But if I try to debug it — it gives me error. I found odbc driver for 64bit but could not download it. Can someone give idea what to do? Odbc source is correct in C:WindowsSysWOW64odbcad32.exe

asked Jan 21, 2014 at 12:39

user1164545's user avatar

2

Try setting the ODBC up (on the 64bit pc)for 32 bit too. the one that you get too via: >contol panel >administrative tools >Data sources (ODBC) see if that works.

answered Jan 29, 2014 at 12:26

PHP Driver version or file name

5.8,5.9

SQL Server version

2014,2017

Client operating system

Microsoft Windows 10 20H2

PHP version

7.4

Microsoft ODBC Driver version

11, 13,17

Table schema

-

Problem description

PHP DB layer libs (example) as well as raw sqlsrv/pdo_sqlsrv can’t connect to the sql server due to Driver's SQLSetConnectAttr failed, even when given a freshly installed sql server express 2017

Expected behavior and actual behavior

Expected: connection succeeds
Actual behavior, connection fails with Driver's SQLSetConnectAttr failed

Repro code or steps to reproduce

Check the sample library test suite above

Note: iirc, version 5.2 via php 7.2 worked correctly & eastablished connections just fine

Понравилась статья? Поделить с друзьями:
  • Дислексические ошибки при чтении
  • Дискпарт проверка диска на ошибки
  • Дискорд сообщить об ошибке
  • Дискорд сетап ошибка
  • Дискорд при установке выдает ошибку kernel