Aracılığıyla paylaş


SQLGetDiagRec ve SQLGetDiagField'i kullanma

Uygulamalar tanılama bilgilerini almak için SQLGetDiagRec veya SQLGetDiagField'ı çağırır. Bu işlevler bir ortam, bağlantı, deyim veya tanımlayıcı tanıtıcı kabul eder ve bu tanıtıcıyı en son kullanan işlevden tanılama bilgilerini döndürür. Belirli bir tanıtıcıda kaydedilen tanılama verileri, bu tanıtıcı kullanılarak yeni bir işlev çağrıldığında atılır. İşlev birden çok tanılama kaydı döndürdüyse, uygulama bu işlevleri birden çok kez çağırır; toplam durum kaydı sayısı, SQL_DIAG_NUMBER seçeneğiyle üst bilgi kaydı (kayıt 0) için SQLGetDiagField çağrılarak alınır.

Uygulamalar SQLGetDiagField çağrısı yaparak ve alınacak alanı belirterek tek tek tanılama alanlarını alır. Belirli tanılama alanlarının belirli tutucu türleri için bir anlamı yoktur. Tanılama alanlarının ve anlamlarının listesi için bkz. SQLGetDiagField işlev açıklaması.

Uygulamalar SQLGetDiagRec'i çağırarak SQLSTATE, yerel hata kodu ve tanılama iletisini tek bir çağrıda alır; SQLGetDiagRec , üst bilgi kaydından bilgi almak için kullanılamaz.

Örneğin, aşağıdaki kod kullanıcıdan bir SQL deyimi ister ve bunu yürütür. Herhangi bir tanılama bilgisi döndürüldüyse, durum kayıtlarının sayısını almak için SQLGetDiagField'i ve bu kayıtlardan SQLSTATE, yerel hata kodu ve tanılama iletisini almak için SQLGetDiagRec'i çağırır.

SQLCHAR       SqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];  
SQLINTEGER    NativeError;  
SQLSMALLINT   i, MsgLen;  
SQLRETURN     rc1, rc2;  
SQLHSTMT      hstmt;  
  
// Prompt the user for a SQL statement.  
GetSQLStmt(SQLStmt);  
  
// Execute the SQL statement and return any errors or warnings.  
rc1 = SQLExecDirect(hstmt, SQLStmt, SQL_NTS);  
if ((rc1 == SQL_SUCCESS_WITH_INFO) || (rc1 == SQL_ERROR)) {
   SQLLEN numRecs = 0;
   SQLGetDiagField(SQL_HANDLE_STMT, hstmt, 0, SQL_DIAG_NUMBER, &numRecs, 0, 0);
   // Get the status records.
   i = 1;  
   while (i <= numRecs && (rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, i, SqlState, &NativeError,  
            Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA) {  
      DisplayError(SqlState,NativeError,Msg,MsgLen);  
      i++;  
   }  
}  
  
if ((rc1 == SQL_SUCCESS) || (rc1 == SQL_SUCCESS_WITH_INFO)) {  
   // Process statement results, if any.  
}