FIX: ODBC 드라이버 관리자 잘못 SQL_NO_DATA_FOUND ANSI 드라이버에 대 한 보고

기술 자료 번역 기술 자료 번역
기술 자료: 319243 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

ANSI 드라이버를 ODBC 드라이버 관리자를 사용 하는 경우 제대로 SQL_NO_DATA_FOUND로 정의 된 열에 대해 반환 하지 않을 수 있습니다. VARCHAR 또는 CHAR 갖고 빈 문자열을. 문제가 발생 하지 않습니다. "NULL" 값 또는 데이터 열을 포함 하는 경우. 경우에 문제가 발생 빈 문자열인 데이터 및 클라이언트 쪽으로 바인딩 SQL_C_WCHAR입니다.

원인

ODBC 드라이버 관리자 제대로 되었다고 가정 하지 드라이버 빈 문자열을 ANSI로 변환 하면 모든 데이터가 없는 유니코드입니다.

해결 방법

이 문제를 해결 하려면 최신 얻을 Microsoft SQL Server 2000 서비스 팩입니다. 에 대 한 자세한 내용은 Microsoft 정보에 해당 문서를 보려면 다음 문서를 참조 기준:
290211 INF: 최신 SQL Server 2000 서비스 팩을 구하는 방법

해결 과정

간단한 해결 방법은이 문제에 대 한 열의 바인딩하는 것입니다. 대신 SQL_C_WCHAR SQL_C_CHAR로.

현재 상태

Microsoft 나열 된 제품에서 문제가 있음을 확인 했습니다. 이 문서의 시작 부분에. 이 문제는 Microsoft SQL Server 처음 수정 되었습니다. 2000 서비스 팩 3입니다.

추가 정보

레거시 응용 프로그램에서 ANSI ODBC 드라이버를 사용 하지 않을 수 있습니다. SQL_C_WCHAR 열을 바인딩할 수 있습니다 없습니다 때문에이 문제가 발생 합니다. 문자 열을 SQL_C_WCHAR Microsoft ODBC.NET 공급자를 바인딩하기 때문에 기본적으로 Microsoft ODBC.NET을 사용 하는 경우이 문제가 발생할 수 있습니다. 공급자는 ANSI 드라이버입니다. 참고 Microsoft ODBC.NET 공급자 이 문제가 발생 하면 "NO_DATA"를 반환 합니다.

동작을 재현 하는 방법

다음 네이티브 샘플 문제를 보여 줍니다.
  1. 다음 스크립트를 사용 하 여 테이블 만들기 및 삽입 하기 레코드:
    Create Table Test (ID integer, COL1 CHAR(10))
    Insert Into Test VALUES (1,'')
    					
  2. 다음 C 프로그램 실행:
    #include <windows.h>
    #include <stdio.h>
    #include <sql.h>
    #include <sqlext.h>
    
    int main(int argc, char* argv[])
    {
    	SQLCHAR*	theDiagState = new SQLCHAR[50];
    	SQLINTEGER	theNativeState;
    	SQLCHAR*	theMessageText  = new SQLCHAR[255];
    	SQLSMALLINT	iOutputNo;
    	SQLHENV		m_SQLEnvironment;
    	SQLHDBC		m_SQLConnection;
    	SQLHSTMT	m_SQLStatement;
    	SQLRETURN	iReturn;
    	long		lStrLen;
    	char		theData[1000];
    
    	//Connect.
    	iReturn = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_SQLEnvironment);
    	iReturn = SQLSetEnvAttr(m_SQLEnvironment,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,0);
    	iReturn = SQLAllocHandle(SQL_HANDLE_DBC,m_SQLEnvironment,&m_SQLConnection);
    
    	//CHANGE THE DSN NAME HERE.
    	char	szConnBuffer[1024];
    	short   cbOutConn;
    	char    szConnStr[255];
    
             strcpy(szConnStr,"DSN=YourANSIDSN;UID=YorUid;Pwd=YourPassword");
    	
    	iReturn= SQLDriverConnect(m_SQLConnection, NULL,
    (SQLTCHAR*) szConnStr,strlen(szConnStr), 
    (SQLCHAR*) szConnBuffer,1024, &cbOutConn, SQL_DRIVER_NOPROMPT);
    
    	if (iReturn != SQL_SUCCESS)
    	{
    		SQLGetDiagRec(SQL_HANDLE_DBC,m_SQLConnection,1,theDiagState,
    &theNativeState,theMessageText,100,&iOutputNo);
    	}
    
    	//Run query.
    	iReturn = SQLAllocHandle(SQL_HANDLE_STMT,m_SQLConnection,&m_SQLStatement);
    
    	//The Test table contains COL1 column which is set to empty for the first record.
    
    	iReturn = SQLExecDirect(m_SQLStatement, (SQLCHAR*) "Select ID,COL1 FROM Test",SQL_NTS);
    	iReturn = SQLFetch(m_SQLStatement);
    
    	iReturn = SQLGetData(m_SQLStatement,2,SQL_C_WCHAR,theData,100,&lStrLen);
    
    	//The problem does not occur if you bind the same column to SQL_C_CHAR.
    	//iReturn = SQLGetData(m_SQLStatement,2,SQL_C_CHAR,theData,100,&lStrLen);
    
    	if (iReturn != SQL_SUCCESS)
    	{
    		//iReturn will be 100 SQL_NO_DATA_FOUND here with NO other message.
    		int CheckHere;
    		CheckHere = 0;  //It will come here.
    		if (iReturn == SQL_NO_DATA_FOUND)
    		{
    			printf("SQL_NO_DATA_FOUND has been returned.\n Press Enter key to continue...\n");
    			getchar();
    		}
    		
    	}
    
    	//DISCONNECT.
    	iReturn = SQLFreeHandle(SQL_HANDLE_STMT,m_SQLStatement);
    	iReturn = SQLDisconnect(m_SQLConnection);
    	iReturn = SQLFreeHandle(SQL_HANDLE_DBC,m_SQLConnection);
    	iReturn = SQLFreeHandle(SQL_HANDLE_ENV,m_SQLEnvironment);
    
    	m_SQLStatement = NULL;
    	m_SQLConnection = NULL;
    	m_SQLEnvironment = NULL;
    
    	delete theMessageText; 
    	delete theDiagState;
    
    	return 1;
    }
    					
    하면 다음과 같은 메시지가 나타납니다.
    SQL_NO_DATA_FOUND는 반환 했습니다.
    계속 하려면 Enter 키를 누르십시오...

속성

기술 자료: 319243 - 마지막 검토: 2013년 6월 28일 금요일 - 수정: 7.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Data Access Components 2.7
키워드:?
kbhotfixserver kbqfe kbdownload kbsqlserv2000sp3fix kbbug kbfix kbsqlserv2000presp3fix kbmt KB319243 KbMtko
기계 번역된 문서
이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.
이 문서의 영문 버전 보기:319243

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com