Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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);
İlgili Fonksiyonlar
| 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 |