SQLDescribeParam İşlevi

Uygunluk
Tanıtılan Sürüm: ODBC 1.0 Standartlar Uyumu: ODBC

Özet
SQLDescribeParam , hazırlanmış bir SQL ifadesiyle ilişkili bir parametre belirticisinin tanımını döndürür. Bu bilgiler IPD alanlarında da mevcuttur.

Syntax

  
SQLRETURN SQLDescribeParam(  
      SQLHSTMT        StatementHandle,  
      SQLUSMALLINT    ParameterNumber,  
      SQLSMALLINT *   DataTypePtr,  
      SQLULEN *       ParameterSizePtr,  
      SQLSMALLINT *   DecimalDigitsPtr,  
      SQLSMALLINT *   NullablePtr);  

Arguments

StatementHandle
[Giriş] Deyim tanıtıcısı.

ParametreNumarası
[Giriş] Parametre işaretçisi numarası, artan parametre sırasıyla sıralanarak, 1'den başlayarak.

DataTypePtr
[Çıkış] Parametrenin SQL veri tipini döndürmek için bir tampon işareti. Bu değer, IPD'nin SQL_DESC_CONCISE_TYPE kayıt alanından okunur. Bu, Ek D'nin SQL Veri Tipleri bölümündeki değerlerden biri veya sürücüye özgü bir SQL veri türü olacaktır.

ODBC 3'te. x, SQL_TYPE_DATE, SQL_TYPE_TIME veya SQL_TYPE_TIMESTAMP tarih, saat veya zaman damgası verileri için *DataTypePtr'de döner; ODBC 2'de. x, SQL_DATE, SQL_TIME veya SQL_TIMESTAMP geri dönecek. Sürücü Yöneticisi, ODBC 2 olduğunda gerekli eşlemeleri gerçekleştirir. x uygulaması ODBC 3 ile çalışıyor. x sürücü veya ODBC 3 olduğunda. x uygulaması ODBC 2 ile çalışıyor. x sürücü.

ColumnNumber 0'a eşit olduğunda (yer imi sütunu için), değişken uzunluktaki yer imleri için *DataTypePtr'de SQL_BINARY döner. (SQL_INTEGER, ODBC 3 tarafından yer imleri kullanılıyorsa geri döner. x uygulaması ODBC 2 ile çalışıyor. x sürücüsü veya ODBC 2 ile yapılabilir. x uygulaması ODBC ile çalışıyor 3. x sürücü.)

Daha fazla bilgi için, Ek D'deki SQL Veri Tipleri'ne bakınız: Veri Türleri. Sürücüye özgü SQL veri türleri hakkında bilgi için sürücünün belgelerine bakın.

ParametreSizePtr
[Çıkış] Veri kaynağı tarafından tanımlanan ilgili parametre belirticisinin sütununun veya ifadesinin boyutunu karakter cinsinden döndürmek için bir tampona işaret gösterici. Sütun boyutu hakkında daha fazla bilgi için Sütun Boyutu, Ondalık Rakamlar, Aktarım Sekizli Uzunluğu ve Ekran Boyutu bölümlerine bakınız.

DecimalDigitsPtr
[Çıkış] Veri kaynağı tarafından tanımlanan ilgili parametrenin sütununun ondalık rakamlarının veya ifadesinin döndürülmesi için bir tampon işaretçisi. Ondalık rakamlar hakkında daha fazla bilgi için Sütun Boyutu, Ondalık Rakamlar, Transfer Sekizli Uzunluğu ve Ekran Boyutu bölümlerine bakınız.

NullablePtr
[Çıkış] Parametrenin NULL değerlere izin verip vermediğini gösteren bir değeri döndürmek için bir tampon işareti. Bu değer IPD'nin SQL_DESC_NULLABLE alanından okunur. Aşağıdakilerden biri:

  • SQL_NO_NULLS: Parametre NULL değerlerine izin vermez (bu varsayılan değerdir).

  • SQL_NULLABLE: Parametre NULL değerlere izin verir.

  • SQL_NULLABLE_UNKNOWN: Sürücü, parametrenin NULL değerlere izin verip vermediğini belirleyemez.

İadeler

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ya da SQL_INVALID_HANDLE.

Diagnostics

SQLDescribeParam SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri, SQL_HANDLE_STMT HandleType ve HandleHandleile SQLGetDiagRec çağrılarak elde edilebilir. Aşağıdaki tablo, genellikle SQLDescribeParam tarafından duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyon bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.

SQLSTATE Error Description
01000 Genel uyarı Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
07009 Geçersiz tanımlayıcı indeksi (DM) ParametreNumber argümanı için belirtilen değer 1'den küçüktür.

ParametreNumber argümanı için belirtilen değer, ilgili SQL ifadesindeki parametre sayısından büyüktü.

Parametre belirteci, DML olmayan bir ifadenin parçasıydı.

Parametre işaretçisi, SELECT listesinin parçasıydı.
08S01 İletişim bağlantısı hatası sürücü ile sürücünün bağlandığı veri kaynağı arasındaki iletişim bağlantısı, işlev işlenmeden önce başarısız oldu.
21S01 Değer listesi, sütun listesiyle eşleşmiyor Ifadedeki INSERT parametre sayısı, ifadede adı geçen tablodaki sütun sayısıyla eşleşmiyordu.
HY000 Genel hata Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar.
HY001 Bellek ayırma hatası Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı.
HY008 İşlem iptal edildi StatementHandle için zaman uyumsuz işleme etkinleştirildi. İşlev çağrıldı ve yürütme tamamlanmadan önce StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. Ardından işlev StatementHandle üzerinde yeniden çağrıldı.

İşlev çağrıldı ve yürütme tamamlanmadan önce, çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı.
HY010 İşlev dizisi hatası (DM) Fonksiyon, StatementHandleiçin SQLPrepare veya SQLExecDirect çağrılmadan önce çağrılmıştır.

(DM) StatementHandle ile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. Bu asenkron fonksiyon, SQLDescribeParam fonksiyonu çağrıldığında hâlâ çalışıyordu.

(DM) StatementHandle için zaman uyumsuz olarak yürütülen bir işlev (bu işlev değil) çağrıldı ve bu işlev çağrıldığında hala yürütülüyordu.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos, StatementHandle için çağrıldı ve SQL_NEED_DATA döndürdü. Bu işlev, tüm yürütme sırasında veri parametreleri veya sütunları için veri gönderilmeden önce çağrıldı.
HY013 Bellek yönetimi hatası Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi.
HY117 Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. (DM) Askıya alınma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi.
HYT01 Bağlantı zaman aşımı süresi doldu Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır.
IM001 Sürücü bu işlevi desteklemiyor (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor.
IM017 Yoklama zaman uyumsuz bildirim modunda devre dışı bırakıldı Bildirim modeli her kullanıldığında yoklama devre dışı bırakılır.
IM018 SQLCompleteAsync , bu tanıtıcıda önceki zaman uyumsuz işlemi tamamlamak için çağrılmadı. Tanıtıcıdaki önceki işlev çağrısı SQL_STILL_EXECUTING döndürüyorsa ve bildirim modu etkinleştirildiyse, son işlemeyi yapmak ve işlemi tamamlamak için tanıtıcıda SQLCompleteAsync çağrılmalıdır.

Comments

Parametre işaretleyicileri, SQL ifadesinde göründükleri sırayla 1 ile başlayan parametre sırasıyla numaralandırılır.

SQLDescribeParam, bir SQL ifadesindeki bir parametrenin türünü (giriş, giriş/çıktı veya çıktı) döndürmez. Prosedür çağrıları dışında, SQL ifadelerindeki tüm parametreler giriş parametreleridir. Bir prosedür çağrısındaki her parametrenin türünü belirlemek için bir uygulama SQLProcedureColumns arar.

Daha fazla bilgi için Parametreleri Tanımlama bölümüne bakınız.

Kod Örneği

Aşağıdaki örnek, kullanıcıdan bir SQL ifadesi ister ve ardından o ifadeyi hazırlar. Sonra, ifadenin herhangi bir parametre içerip içermediğini belirlemek için SQLNumParams çağırır. Eğer ifade parametre içeriyorsa, bu parametreleri tanımlamak için SQLDescribeParam ve bağlamak için SQLBindParameter çağırır. Son olarak, kullanıcıya herhangi bir parametrin değerini sorar ve ardından ifadeyi çalıştırır.

SQLCHAR       Statement[100];  
SQLSMALLINT   NumParams, i, DataType, DecimalDigits, Nullable;  
SQLUINTEGER   ParamSize;  
SQLHSTMT      hstmt;  
  
// Prompt the user for a SQL statement and prepare it.  
GetSQLStatement(Statement);  
SQLPrepare(hstmt, Statement, SQL_NTS);  
  
// Check to see if there are any parameters. If so, process them.  
SQLNumParams(hstmt, &NumParams);  
if (NumParams) {  
   // Allocate memory for three arrays. The first holds pointers to buffers in which  
   // each parameter value will be stored in character form. The second contains the  
   // length of each buffer. The third contains the length/indicator value for each  
   // parameter.  
   SQLPOINTER * PtrArray = (SQLPOINTER *) malloc(NumParams * sizeof(SQLPOINTER));  
   SQLINTEGER * BufferLenArray = (SQLINTEGER *) malloc(NumParams * sizeof(SQLINTEGER));  
   SQLINTEGER * LenOrIndArray = (SQLINTEGER *) malloc(NumParams * sizeof(SQLINTEGER));  
  
   for (i = 0; i < NumParams; i++) {  
   // Describe the parameter.  
   SQLDescribeParam(hstmt, i + 1, &DataType, &ParamSize, &DecimalDigits, &Nullable);  
  
   // Call a helper function to allocate a buffer in which to store the parameter  
   // value in character form. The function determines the size of the buffer from  
   // the SQL data type and parameter size returned by SQLDescribeParam and returns  
   // a pointer to the buffer and the length of the buffer.  
   AllocParamBuffer(DataType, ParamSize, &PtrArray[i], &BufferLenArray[i]);  
  
   // Bind the memory to the parameter. Assume that we only have input parameters.  
   SQLBindParameter(hstmt, i + 1, SQL_PARAM_INPUT, SQL_C_CHAR, DataType, ParamSize,  
         DecimalDigits, PtrArray[i], BufferLenArray[i],  
         &LenOrIndArray[i]);  
  
   // Prompt the user for the value of the parameter and store it in the memory  
   // allocated earlier. For simplicity, this function does not check the value  
   // against the information returned by SQLDescribeParam. Instead, the driver does  
   // this when the statement is executed.  
   GetParamValue(PtrArray[i], BufferLenArray[i], &LenOrIndArray[i]);  
   }  
}  
  
// Execute the statement.  
SQLExecute(hstmt);  
  
// Process the statement further, such as retrieving results (if any) and closing the  
// cursor (if any). Code not shown.  
  
// Free the memory allocated for each parameter and the memory allocated for the arrays  
// of pointers, buffer lengths, and length/indicator values.  
for (i = 0; i < NumParams; i++) free(PtrArray[i]);  
free(PtrArray);  
free(BufferLenArray);  
free(LenOrIndArray);  
Hakkında bilgi için Bkz:
Bir tamponu bir parametreye bağlama SQLBindParameter Fonksiyonu
Deyim işlemeyi iptal etme SQLCancel İşlevi
Hazırlanmış bir SQL deyimini yürütme SQLExecute İşlevi
Bir deyimi yürütme için hazırlama SQLPrepare İşlevi

Ayrıca Bkz.

ODBC API Referansı
ODBC Üst Bilgi Dosyaları