FIX: SQLColAttribute restituisce attributi di tabella non valido quando il nome tabella contiene un punto

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

290646
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
BUG #: 46409 (SHILOH_bug)
BUG #: 56030 (SQLBUG_70)
Sintomi
Quando si utilizza la funzione SQLColAttribute per restituire informazioni descrittore SQL_DESC_SCHEMA_NAME, SQL_DESC_TABLE_NAME, SQL_DESC_BASE_TABLE_NAME o SQL_DESC_CATALOG_NAME, possono essere restituiti valori non corretti quando il nome della tabella contiene un punto.
Cause
ODBC utilizza periodi per delimitare oggetti di SQL Server nel formato Computer.Database.Owner.Object.
Risoluzione

SQL Server 2000

Per risolvere il problema, ottenere il service pack più recente per Microsoft SQL Server 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
290211INF: Come ottenere il Service Pack più recente per SQL Server 2000

SQL Server 7.0

Per risolvere questo problema, non utilizzare periodi compresi i nomi degli oggetti SQL Server.

Microsoft Data Access Components (MDAC)

Per risolvere il problema, ottenere il service pack più recente per Microsoft Data Access Components 2.6. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
300635INFORMAZIONI: Come ottenere il più recente MDAC 2.6 Service Pack
Status
Microsoft ha confermato che questo problema riguarda i prodotti Microsoft elencati all'inizio di questo articolo.

SQL Server 2000

Il problema è stato risolto nel Service Pack 1 per SQL Server 2000.

Microsoft Data Access Components (MDAC)

Questo problema è stato innanzitutto corretto in Microsoft Data Access Components 2.6 Service Pack 1.
Informazioni

Procedura per riprodurre il problema

  1. Incollare il codice seguente in un nuovo file cpp:
    #include <windows.h>#include <stdio.h>#include <tchar.h>#include "sql.h"#include "sqlext.h"#include "odbcss.h"int main()    {    // ODBC handles    SQLHENV     henv = NULL;    SQLHDBC     hdbc = NULL;    SQLHSTMT    hstmt = NULL;	char szData[100];	short l; 	//These must be modified for your specific DSN    PTSTR       szDataSource = _T("localserver");    PTSTR       szUID = _T("UserName");    PTSTR       szPWD = _T("Password");	PTSTR		szDropTable = _T("if exists (select * from dbo.sysobjects where id = object_id(N'[my.table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [my.table]");	PTSTR		szCreateTable = _T("Create Table [my.table] (col1 int)");	PTSTR       szSQLSelect = _T("Select * from dbo.[my.table]");    // Initialize the ODBC environment.    if (SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv) == SQL_ERROR)        goto EXIT;    SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, SQL_IS_INTEGER);    // Allocate a connection handle and connect to the data source.    if (SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) == SQL_ERROR)        goto EXIT;    if (SQLConnect(hdbc, (SQLTCHAR*) szDataSource, SQL_NTS, (SQLTCHAR*) szUID, SQL_NTS, (SQLTCHAR*) szPWD, SQL_NTS) == SQL_ERROR)        goto EXIT;    // Get a statement handle and execute a Transact-SQL SELECT statement.    if (SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt) == SQL_ERROR)        goto EXIT;	if(SQLSetScrollOptions( hstmt, SQL_CONCUR_VALUES, SQL_SCROLL_DYNAMIC, 1) == SQL_ERROR)		goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szDropTable, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szCreateTable, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szSQLSelect, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLColAttribute(hstmt, 1, SQL_DESC_SCHEMA_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_SCHEMA_NAME = %s, should be dbo\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_TABLE_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_TABLE_NAME = %s, should be my.table\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_BASE_TABLE_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_BASE_TABLE_NAME = %s, should be my.table\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_CATALOG_NAME, &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_CATALOG_NAME = %s, should be database specified in dsn\n"),szData);EXIT:    if (hstmt != NULL)        {        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);        }    if (hdbc != NULL)        {        SQLDisconnect(hdbc);        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);        }    if (henv != NULL)        {        SQLFreeHandle(SQL_HANDLE_ENV, henv);        }    return (0);    }					
  2. Compilare il codice ed eseguirlo. I risultati sono i seguenti:
    SQL_DESC_SCHEMA_NAME = my, should be dboSQL_DESC_TABLE_NAME = table, should be my.tableSQL_DESC_BASE_TABLE_NAME = table, should be my.tableSQL_DESC_CATALOG_NAME = dbo, should be database specified in dsn					

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 290646 - Ultima revisione: 01/16/2015 21:48:38 - Revisione: 3.2

  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix kbmdac260sp1fix kbsqlserv2000sp1fix KB290646 KbMtit
Feedback