SQLParamData İşlevi

Uygunluk
Kullanıma Sunulan Sürüm: ODBC 1.0 Standartları Uyumluluğu: ISO 92

Summary
SQLParamData , ifade yürütme zamanında parametre verisi sağlamak için SQLPutData ile birlikte kullanılır ve akışlı çıktı parametre verilerini almak için SQLGetData ile birlikte kullanılır.

Syntax

  
SQLRETURN SQLParamData(  
     SQLHSTMT       StatementHandle,  
     SQLPOINTER *   ValuePtrPtr);  

Arguments

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

ValuePtrPtr
[Çıkış] SQLBindParameter içinde belirtilen ParameterValuePtr tamponunun adresini (parametre verileri için) veya SQLBindCol'da belirtilen TargetValuePtr tamponu adresini (sütun verisi için) döndürmek için bir tampon işareti, SQL_DESC_DATA_PTR tanımlayıcı kayıt alanında yer alan gibi.

İadeler

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_INVALID_HANDLE veya SQL_PARAM_DATA_AVAILABLE.

Diagnostics

SQLParamData SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri SQLGetDiagRec çağrılarak SQL_HANDLE_STMT HandleType ve HandleHandle ile elde edilebilir. Aşağıdaki tablo, genellikle SQLParamData tarafından duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyonun 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.)
07006 Kısıtlanmış veri türü özniteliği ihlali İlişkili parametre için SQLBindParameter'daki ValueType bağımsız değişkeni tarafından tanımlanan veri değeri , SQLBindParameter'dakiParameterType bağımsız değişkeni tarafından tanımlanan veri türüne dönüştürülemedi.

SQL_PARAM_INPUT_OUTPUT veya SQL_PARAM_OUTPUT olarak bağlanan bir parametre için döndürülen veri değeri, SQLBindParameter'dakiValueType bağımsız değişkeni tarafından tanımlanan veri türüne dönüştürülemedi.

(Bir veya daha fazla satır için veri değerleri dönüştürülemezse ancak bir veya daha fazla satır başarıyla döndürüldüyse, bu fonksiyon SQL_SUCCESS_WITH_INFO döner.)
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.
22026 Dize verileri, uzunluk uyuşmazlığı SQLGetInfo'daki SQL_NEED_LONG_DATA_LEN bilgi tipi "Y" idi ve uzun bir parametre için (veri tipi SQL_LONGVARCHAR, SQL_LONGVARBINARY veya uzun veri kaynağına özgü veri türü) SQLBindParameter'dekiStrLen_or_IndPtr argümanında belirtilenden daha az veri gönderiliyordu.

SQLGetInfo'daki SQL_NEED_LONG_DATA_LEN bilgi tipi "Y" idi ve uzun bir sütun için (veri tipi SQL_LONGVARCHAR, SQL_LONGVARBINARY veya uzun veri kaynağına özgü veri tipi idi) gönderilen veriler, SQLBulkOperations ile eklenen veya güncellenen ya da SQLSetPos ile güncellenen bir dizi veri sütununa karşılık gelen uzunluk tamponunda belirtilen verilerden daha az veri gönderiliyordu.
40001 Serileştirme hatası Başka bir işlemle kaynak kilitlenmesi nedeniyle işlem geri alındı.
40003 Deyim tamamlama bilinmiyor İlişkili bağlantı bu işlevin yürütülmesi sırasında başarısız oldu ve işlemin durumu belirlenemiyor.
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. Fonksiyon çağrıldı ve çalıştırma tamamlanmadan önce StatementHandleüzerinde SQLCancel veya SQLCancelHandle çağrıldı; fonksiyon daha sonra StatementHandle üzerinde tekrar ç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) Önceki fonksiyon çağrısı, dönüş kodu SQLExecDirect, SQLBulkOperations veya SQLSetPos çağrısı değildi ve geri dönüş kodu SQL_NEED_DATA ya da önceki fonksiyon çağrısı SQLPutData çağrısıydı.

Önceki fonksiyon çağrısı SQLParamData çağrısıydı.

(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, SQLParamData 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.

StatementHandleiçin SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos çağrıldı ve SQL_NEED_DATA dönerdi. SQLCancel , tüm veri yürütme parametreleri veya sütunları için veri gönderilmeden önce çağrılmıştır.
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'a karşılık gelen sürücü bu fonksiyonu desteklemez.
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.

Eğer SQLParamData bir SQL ifadesinde bir parametre için veri gönderilirken çağrılırsa, bu ifadeyi çalıştırmak için çağrılan fonksiyon (SQLExecute veya SQLExecDirect) tarafından döndürülebilecek herhangi bir SQLSTATE'i döndürebilir. Eğer bir sütun için veri gönderilirken çağrılırsa, SQLBulkOperations ile güncellenir veya SQLSetPos ile güncellenirse, SQLBulkOperations veya SQLSetPos tarafından döndürülebilecek herhangi bir SQLSTATE'i döndürebilir.

Comments

SQLParamData , iki kullanım için çalıştırma verisi sağlamak için çağrılabilir: SQLExecute veya SQLExecDirect çağrısında kullanılacak parametre verisi, ya da bir satırın güncellendiğinde veya SQLBulkOperations çağrısıyla eklendiğinde veya SQLSetPos çağrısıyla güncellenecek sütun verileri. Çalıştırma zamanında, SQLParamData uygulamaya sürücünün hangi veriyi gerektirdiğine dair bir gösterge döner.

Bir uygulama SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos çağırdığında, sürücü yürütme verisine ihtiyaç duyulursa SQL_NEED_DATA döner. Bir uygulama daha sonra hangi veriyi göndereceğini belirlemek için SQLParamData çağırır. Sürücü parametre verisi gerektiriyorsa, sürücü *ValuePtrPtr çıkış tamponunda uygulamanın satır kümesi tamponuna koyduğu değeri döndürür. Uygulama, sürücünün hangi parametre verisini talep ettiğini belirlemek için bu değeri kullanabilir. Sürücü sütun verisi gerektiriyorsa, sürücü *ValuePtrPtr tamponunda sütunun orijinal bağlı olduğu adresi şu şekilde döndürür:

Bağlı Adres + Bağlama Ofseti + ((Sıra Numarası - 1) x Eleman Boyutu)

burada değişkenler aşağıdaki tabloda belirtildiği gibi tanımlanmıştır.

Variable Description
Bağlı Adres SQLBindCol'daTargetValuePtr argümanı ile belirtilen adres.
Bağlama Ofseti SQL_ATTR_ROW_BIND_OFFSET_PTR ifadesi özniteliğiyle belirtilen adreste saklanan değer.
Sıra Numarası Sıra kümesindeki sıranın 1 bazlı sayısı. Varsayılan tek satırlı getirmeler için bu 1'dir.
Element Boyutu Hem veri hem de uzunluk/gösterge tamponları için SQL_ATTR_ROW_BIND_TYPE ifadesi özniteliğinin değeri.

Ayrıca SQL_NEED_DATA'yi döndürür; bu, uygulamaya veriyi göndermek için SQLPutData çağırması gerektiğinin göstergesidir.

Uygulama, sütun veya parametre için yürütme verisini göndermek için SQLPutData'yı gerekli kadar çağırır. Tüm veriler sütun veya parametre için gönderildikten sonra, uygulama tekrar SQLParamData çağırır. Eğer SQLParamData tekrar SQL_NEED_DATA dönerse, veri başka bir parametre veya sütun için gönderilmelidir. Bu nedenle, uygulama tekrar SQLPutData'yı çağırır. Eğer tüm veri tüm parametreler veya sütunlar için gönderilmişse, SQLParamData SQL_SUCCESS veya SQL_SUCCESS_WITH_INFO döner, *ValuePtrPtr'deki değer tanımlanmamıştır ve SQL ifadesi çalıştırılabilir veya SQLBulkOperations veya SQLSetPos çağrısı işlenebilir.

SQLParamData, veri kaynağında hiçbir satır etkisi etmeyen aranan güncelleme veya silme ifadesi için parametre verisi sağlarsa, SQLParamData çağrısı SQL_NO_DATA döndürür.

Veri uygulamada parametre verisinin ifade yürütme zamanında nasıl iletildiğine dair daha fazla bilgi için, SQLBindParameter ve Uzun Veri Gönderme bölümlerinde "Parametre Değerlerini Geçirme" bölümüne bakabilirsiniz. Veri yürütme sütununun verilerinin nasıl güncellendiği veya eklendiği hakkında daha fazla bilgi için SQLSetPos'taki "SQLSetPos Kullanımı", SQLBulkOperations'taki "Yer imimleri kullanarak toplu güncellemeler yapma" bölümüne ve Long Data ile SQLSetPos ile SQLBulkOperations bölümlerine bakınız.

SQLParamData , akışlı çıktı parametrelerini almak için çağrılabilir. SQLMoreResults, SQLExecute, SQLGetData veya SQLExecDirect SQL_PARAM_DATA_AVAILABLE döndürdüğünde, hangi parametrenin değeri olduğunu belirlemek için SQLParamData çağırın. SQL_PARAM_DATA_AVAILABLE ve akışlı çıktı parametreleri hakkında daha fazla bilgi için Çıkış Parametrelerini SQLGetData Kullanarak Alınma bölümüne bakınız.

Kod Örneği

SQLPutData ile ilgili bilgiye bakınız.

Hakkında bilgi için Bkz:
Bir tamponu bir parametreye bağlama SQLBindParameter Fonksiyonu
Deyim işlemeyi iptal etme SQLCancel İşlevi
Bir ifadede bir parametre hakkında bilgi döndürülmesi SQLDescribeParam Fonksiyonu
SQL ifadesinin yürütülmesi SQLExecDirect Fonksiyonu
Hazırlanmış bir SQL deyimini yürütme SQLExecute İşlevi
Yürütme zamanında parametre verileri gönderme SQLPutData İşlevi