SQLBindParameter İşlevi

Uygunluk
Tanıtılan Sürüm: ODBC 2.0 Standartlara Uyum: ODBC

Özet
SQLBindParameter bir SQL ifadesindeki bir parametre işaretçisine bir tampon bağlar. SQLBindParameters , temel sürücü Unicode verisini desteklemese bile Unicode C veri tipine bağlanmayı destekler.

Uyarı

Bu fonksiyon, ODBC 1.0 fonksiyonu SQLSetParam'ın yerini alır. Daha fazla bilgi için "Yorumlar" bölümüne bakınız.

Syntax

  
SQLRETURN SQLBindParameter(  
      SQLHSTMT        StatementHandle,  
      SQLUSMALLINT    ParameterNumber,  
      SQLSMALLINT     InputOutputType,  
      SQLSMALLINT     ValueType,  
      SQLSMALLINT     ParameterType,  
      SQLULEN         ColumnSize,  
      SQLSMALLINT     DecimalDigits,  
      SQLPOINTER      ParameterValuePtr,  
      SQLLEN          BufferLength,  
      SQLLEN *        StrLen_or_IndPtr);  

Arguments

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

ParametreNumarası
[Giriş] Parametre numarası, artan parametre sırasıyla sıralanmış, 1'den başlamaktadır.

InputOutputType
[Giriş] Parametrenin türü. Daha fazla bilgi için "InputOutputType Argümanı" (InputOutputType Argümanı) bölümünü "Yorumlar" bölümünde bulabilirsiniz.

ValueType
[Giriş] Parametrenin C veri tipi. Daha fazla bilgi için "Yorumlar" bölümünde "ValueType Argümanı"na bakınız.

ParameterType
[Giriş] Parametrenin SQL veri tipi. Daha fazla bilgi için "Yorumlar" bölümünde "ParametreType Argümanı"na bakınız.

ColumnSize
[Giriş] Sütunun boyutu veya ilgili parametre belirtecinin ifadesi. Daha fazla bilgi için "Yorumlar" bölümünde "ColumnSize Argümanı" bölümüne bakınız.

Uygulamanız 64-bit Windows işletim sisteminde çalışacaksa, ODBC 64-Bit Bilgisi'ne bakınız.

DesimalDigits
[Giriş] Sütunun ondalık rakamları veya ilgili parametre belirtecinin ifadesi. 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.

ParameterValuePtr
[Ertelenmiş Giriş] Parametrenin verisi için bir tampon işareti. Daha fazla bilgi için "ParameterValuePtr Argümanı"na bakınız.

BufferLength
[Giriş/Çıkış] ParameterValuePtr tamponunun bayt cinsinden uzunluğu. Daha fazla bilgi için "Yorumlar" bölümündeki "BufferLength Argümanı"na bakınız.

Uygulamanızın 64-bit işletim sisteminde çalışıp çalışmayacağı için ODBC 64-Bit Bilgileri'ne bakınız.

StrLen_or_IndPtr
[Ertelenmiş Giriş] Parametrenin uzunluğu için bir tampon işareti. Daha fazla bilgi için "Yorumlar" bölümündeki "StrLen_or_IndPtr Argümanı"na bakınız.

İadeler

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR veya SQL_INVALID_HANDLE.

Diagnostics

SQLBindParameter SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri, SQL_HANDLE_STMT HandleType ve HandleType ile StatementHandle ile SQLGetDiagRec çağrılarak elde edilebilir. Aşağıdaki tablo, genellikle SQLBindParameter 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 ValueType argümanı tarafından tanımlanan veri türü, ParameterType argümanı tarafından tanımlanan veri türüne dönüştürülemez. Bu hatanın SQL IndParameter yerine SQL XecDirect, SQLExecute veya SQLPutData tarafından yürütme sırasında geri dönebileceğine dikkat edin.
07009 Geçersiz tanımlayıcı indeksi (DM) ParametreNumber argümanı için belirtilen değer 1'den küçüktü.
HY000 Genel hata Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText buffer'da SQLGetDiagRec tarafından gönderilen hata mesajı, hatayı ve nedenini tanımlar.
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ı.
HY003 Geçersiz uygulama tamponu türü ValueType argümanı tarafından belirtilen değer, geçerli bir C veri tipi veya SQL_C_DEFAULT değildi.
HY004 Geçersiz SQL veri tipi ParameterType argümanı için belirtilen değer, ne geçerli bir ODBC SQL veri tipi tanımlayıcısı ne de sürücü tarafından desteklenen sürücüye özgü bir SQL veri tipi tanımlayıcısı değildi.
HY009 Geçersiz argüman değeri (DM) ParameterValuePtr argümanı null işaretçiydi, argüman StrLen_or_IndPtr null işaretçiydi ve InputOutputType argüman SQL_PARAM_OUTPUT değildi.

(DM) SQL_PARAM_OUTPUT, ParameterValuePtr argümanı null işaretçi, C tipi char veya ikili ve BufferLength (cbValueMax) 0'dan büyük olduğunda.
HY010 İşlev dizisi hatası (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 SQLBindParameter çağrıldığında hâlâ çalışıyordu.

(DM) SQLExecute, SQLExecDirect veya SQLMoreResults, StatementHandle için çağrıldı ve SQL_PARAM_DATA_AVAILABLE döndürdü. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı.

(DM) StatementHandle için asenkron olarak çalışan bir fonksiyon çağrıldı ve bu fonksiyon çağrıldığında hâlâ çalışı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.
HY021 Tutarsız tanımlayıcı bilgisi Tutarlılık kontrolü sırasında kontrol edilen tanımlayıcı bilgileri tutarlı değildi. ( SQLSetDescField'daki "Tutarlılık Kontrolleri" bölümüne bakınız.)

DecimalDigits argümanı için belirtilen değer, ParameterType argümanı tarafından belirtilen SQL veri tipinin bir sütunu için veri kaynağı tarafından desteklenen değer aralığının dışındaydı.
HY090 Geçersiz dize veya arabellek uzunluğu (DM) BufferLength değeri 0'dan küçüktü. ( SQLSetDescField içindeki SQL_DESC_DATA_PTR alanının açıklamasına bakınız.)
HY104 Geçersiz hassasiyet veya ölçek değeri ColumnSize veya DecimalDigits argümanı için belirtilen değer, ParameterType argümanı tarafından belirtilen SQL veri tipi sütunu için veri kaynağı tarafından desteklenen değer aralığının dışındaydı.
HY105 Geçersiz parametre türü (DM) InputOutputType argümanı için belirtilen değer geçersizdi. ("Yorumlar" bölümüne bakınız.)
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.
HYC00 İsteğe bağlı özellik uygulanmadı Sürücü veya veri kaynağı, argüman için belirtilen değer ValueType ile ParameterType argümanı için belirtilen sürücüye özgü değerin birleşimiyle belirlenen dönüşümü desteklemez.

ParameterType argümanı için belirtilen değer, sürücünün desteklediği ODBC sürümü için geçerli bir ODBC SQL veri tipi tanımlayıcısıydı ancak sürücü veya veri kaynağı tarafından desteklenmedi.

Sürücü sadece ODBC 2'yi destekliyor. x ve ValueType argümanı aşağıdakilerden biriydi:

SQL_C_NUMERIC SQL_C_SBIGINT SQL_C_UBIGINT

ve Ek D'deki C Veri Tipleri'nde listelenen tüm aralık C veri türleri: Veri Türleri.

Sürücü yalnızca 3.50 öncesi ODBC sürümlerini destekler ve ValueType argümanı SQL_C_GUID.
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.

Comments

Bir uygulama, her bir parametre işaretleyicisini bir SQL ifadesindeki bağlamak için SQLBindParameter çağırır. Bağlamalar, uygulama tekrar SQLBindParameter çağırana kadar, SQL_RESET_PARAMS seçeneğiyle SQLFreeStmt'yi çağırana veya APD'nin SQL_DESC_COUNT başlık alanını 0'a ayarlamak için SQLSetDescField çağırana kadar geçerlidir.

Parametreler hakkında daha fazla bilgi için bkz. Deyim Parametreleri. Parametre veri türleri ve parametre işaretleyicileri hakkında daha fazla bilgi için, Ek C: SQL Gramar'deki Parametre Veri Tipleri ve Parametre Belirteçleri'ne bakınız.

Parametre Numarası Argümanı

SQLBindParameter çağrısındaki ParameterNumber SQL_DESC_COUNT değerinden büyükse, SQLSetDescField SQL_DESC_COUNT değerini ParameterNumber'a çıkarmak için çağrılır.

InputOutputType Argümanı

InputOutputType argümanı, parametrenin türünü belirtir. Bu argüman, IPD'nin SQL_DESC_PARAMETER_TYPE alanını belirler. SQL ifadelerindeki prosedürleri çağırmayan tüm parametreler, örneğin INSERT ifadeler, girişparametreleridir. Yordam çağrılarındaki parametreler giriş, giriş/çıkış veya çıkış parametreleri olabilir. (Bir uygulama, prosedür çağrısındaki bir parametrenin türünü belirlemek için SQLProcedureColumns çağırır; türü belirlenemeyen parametrelerin giriş parametreleri olduğu varsayılır.)

InputOutputType argümanı aşağıdaki değerlerden biridir:

  • SQL_PARAM_INPUT. Parametre, bir prosedür çağırmayan bir parametreyi işaretler, örneğin bir INSERT ifade gibi, ya da bir prosedürde giriş parametresini işaretler. Örneğin, INTO Çalışan DEĞERLERİ (?, ?, ?) içindekiINSERT parametreler giriş parametreleridir; oysa {call AddEmp(?, ?, ?)} içindeki parametreler giriş parametreleri olabilir, ancak zorunlu olarak giriş parametreleri değildir.

    Ifadesi yürütüldüğünde, sürücü parametre için veri kaynağına veri gönderir; *ParameterValuePtr tamponu geçerli bir giriş değeri içermelidir veya *StrLen_or_IndPtr tamponu SQL_NULL_DATA, SQL_DATA_AT_EXEC veya SQL_LEN_DATA_AT_EXEC makrosunun sonucunu içermelidir.

    Bir uygulama, bir prosedür çağrısında bir parametrenin türünü belirleyemezse, InputOutputType'ı SQL_PARAM_INPUT olarak ayarlar; veri kaynağı parametre için bir değer döndürürse, sürücü onu atar.

  • SQL_PARAM_INPUT_OUTPUT. Parametre, bir prosedürde bir giriş/çıkış parametresini işaretler. Örneğin, {call GetEmptDept(?)} içindeki parametre, bir çalışanın adını kabul eden ve çalışan departmanının adını döndüren bir giriş/çıkış parametresidir.

    Ifadesi yürütüldüğünde, sürücü parametre için veri kaynağına veri gönderir; *ParameterValuePtr tamponu geçerli bir giriş değeri içermelidir veya *StrLen_or_IndPtr tamponu SQL_NULL_DATA, SQL_DATA_AT_EXEC veya SQL_LEN_DATA_AT_EXEC makrosunun sonucunu içermelidir. İfade yürütüldükten sonra, sürücü parametre için veriyi uygulamaya döner; Veri kaynağı bir giriş/çıkış parametresi için değer döndürmezse, sürücü *StrLen_or_IndPtr tamponunu SQL_NULL_DATA olarak ayarlar.

    Uyarı

    Bir ODBC 1.0 uygulaması ODBC 2.0 sürücüsünde SQLSetParam çağırdığında, Sürücü Yöneticisi bunu SQLBindParameter çağrısına dönüştürür ve burada InputOutputType argümanı SQL_PARAM_INPUT_OUTPUT olarak ayarlanır.

  • SQL_PARAM_OUTPUT. Parametre, bir prosedürün veya bir prosedürdeki çıktı parametresinin dönüş değerini işaretler; her iki durumda da, bunlar çıkış parametreleri olarak bilinir. Örneğin, {?=call GetNextEmpID} içindeki parametre, bir sonraki çalışan kimliğini döndüren bir çıktı parametresidir.

    Gönderim yürütüldükten sonra, sürücü parametre için veriyi uygulamaya döner; ParameterValuePtr ve StrLen_or_IndPtr argümanları her ikisi de null işaretçi değilse, sürücü çıktı değerini atar. Veri kaynağı çıkış parametresi için değer döndürmezse, sürücü *StrLen_or_IndPtr tamponunu SQL_NULL_DATA olarak ayarlar.

  • SQL_PARAM_INPUT_OUTPUT_STREAM. Bir giriş/çıkış parametresinin akış yapması gerektiğini gösterir. SQLGetData parametre değerlerini parçalar halinde okuyabilir. BufferLength göz ardı edilir çünkü buffer uzunluğu SQLGetData çağrısıyla belirlenir. StrLen_or_IndPtr tamponunun değeri SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_DATA_AT_EXEC veya SQL_LEN_DATA_AT_EXEC makrosunun sonucunu içermelidir. Bir parametre, çıkışta akış yapacaksa, girişte bir veri uygulamada (DAE) parametre olarak sınırlandırılmalıdır. ParameterValuePtr,SQLParamData tarafından kullanıcı tanımlı token olarak geri gönderilecek herhangi bir null olmayan işaretçi değeri olabilir; bu değer hem giriş hem çıktı için ParameterValuePtr ile iletilen bir token. Daha fazla bilgi için bkz. SQLGetData Kullanarak Çıktı Parametrelerini Alma.

  • SQL_PARAM_OUTPUT_STREAM. SQL_PARAM_INPUT_OUTPUT_STREAM ile aynı şekilde, çıkış parametresi için. * StrLen_or_IndPtr girişte göz ardı edilir.

Aşağıdaki tablo, InputOutputType ve *StrLen_or_IndPtr'ın farklı kombinasyonlarını listeler:

InputOutputType * Strlen_or_ındptr Sonuç ParameterValuePtr hakkında yorum
SQL_PARAM_INPUT SQL_LEN_DATA_AT_EXEC(len) ya da SQL_DATA_AT_EXEC Parçalar halinde giriş ParameterValuePtr,SQLParamData tarafından kullanıcıya yöneltilen token olarak geri gönderilecek herhangi bir işaretçi değeri olabilir ve değeri ParameterValuePtr ile iletilir.
SQL_PARAM_INPUT Ne SQL_LEN_DATA_AT_EXEC(len) ne de SQL_DATA_AT_EXEC Giriş bağlı tampon ParameterValuePtr, giriş tamponunun adresidir.
SQL_PARAM_OUTPUT Girişte görmezden geliniyor. Çıkış bağlı tampon ParameterValuePtr, çıkış tamponunun adresidir.
SQL_PARAM_OUTPUT_STREAM Girişte görmezden geliniyor. Akışlı çıkış ParameterValuePtr, herhangi bir işaretçi değeri olabilir ve SQLParamData tarafından ParameterValuePtr ile iletilen kullanıcı tanımlı token olarak geri gönderilecektir.
SQL_PARAM_INPUT_OUTPUT SQL_LEN_DATA_AT_EXEC(len) ya da SQL_DATA_AT_EXEC Parça girdi ve çıkış bağlı tampon ParameterValuePtr, çıktı tamponunun adresidir ve bu adres de SQLParamData tarafından ParameterValuePtr ile iletilen kullanıcı tanımlı token olarak geri döner.
SQL_PARAM_INPUT_OUTPUT Ne SQL_LEN_DATA_AT_EXEC(len) ne de SQL_DATA_AT_EXEC Giriş bağlı tampon ve çıkış sınırlı tampon ParameterValuePtr, paylaşılan giriş/çıkış tamponunun adresidir.
SQL_PARAM_INPUT_OUTPUT_STREAM SQL_LEN_DATA_AT_EXEC(len) ya da SQL_DATA_AT_EXEC Parça ve akış olarak giriş ParameterValuePtr, herhangi bir null olmayan işaretçi değeri olabilir ve SQLParamData tarafından kullanıcı tanımlı token olarak geri döner; bu değer hem giriş hem çıktı için ParameterValuePtr ile iletilir.

Uyarı

Sürücü, bir uygulama bir çıkış veya giriş-çıktı parametresini akış olarak bağladığında hangi SQL türlerine izin verileceğine karar vermelidir. Sürücü yöneticisi, geçersiz bir SQL türü için hata oluşturmaz.

ValueType Argümanı

ValueType argümanı, parametrenin C veri tipini belirtir. Bu argüman, APD'nin SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE ve SQL_DESC_DATETIME_INTERVAL_CODE alanlarını belirler. Bu, Ek D: Veri Tipleri kitabının C Veri Tipleri bölümündeki değerlerden biri olmalıdır.

ValueType argümanı aralık veri tiplerinden biriyse, APD'nin ParameterNumber kaydının SQL_DESC_TYPE alanı SQL_INTERVAL olarak ayarlanır, APD'nin SQL_DESC_CONCISE_TYPE alanı kısa aralık veri tipine ayarlanır ve ParameterNumber kaydının SQL_DESC_DATETIME_INTERVAL_CODE alanı belirli aralık veri tipi için bir alt kod olarak ayarlanır. ( Bkz. Ek D: Veri Türleri.) APD'nin SQL_DESC_DATETIME_INTERVAL_PRECISION ve SQL_DESC_PRECISION alanlarında sırasıyla belirlenen varsayılan aralık lider hassasiyeti (2) ve varsayılan aralık saniyesi hassasiyeti (6) veri için kullanılır. Varsayılan hassasiyetlerden biri uygun değilse, uygulama tanımlayıcı alanını SQLSetDescField veya SQLSetDescRec çağrısıyla açıkça ayarlamalıdır.

Eğer ValueType argümanı tarih saati veri tiplerinden biriyse, APD'nin ParametreNumber kaydının SQL_DESC_TYPE alanı SQL_DATETIME olarak ayarlanır, APD'nin ParametreNumber kaydının SQL_DESC_CONCISE_TYPE alanı kısa tarih C veri tipine ayarlanır ve ParametreNumber kaydının SQL_DESC_DATETIME_INTERVAL_CODE alanı belirli tarih saati veri tipine göre bir alt kod olarak ayarlanır. ( Bkz. Ek D: Veri Türleri.)

Eğer ValueType argümanı SQL_C_NUMERIC bir veri tipi ise, veri için varsayılan hassasiyet (sürücü tarafından tanımlanan) ve APD'nin SQL_DESC_PRECISION ve SQL_DESC_SCALE alanlarında belirlenen varsayılan ölçek (0) kullanılır. Varsayılan hassasiyet veya ölçek uygun değilse, uygulama tanımlayıcı alanını SQLSetDescField veya SQLSetDescRec çağrısıyla açıkça ayarlamalıdır.

SQL_C_DEFAULT, ParameterType ile belirtilen SQL veri tipi için parametre değerinin varsayılan C veri tipinden aktarılmasını belirtir.

Ayrıca genişletilmiş bir C veri tipi de belirtebilirsiniz. Daha fazla bilgi için bkz. ODBC'de C Veri Türleri.

Daha fazla bilgi için, Ek D'deki Varsayılan C Veri Tipleri, C'den SQL Veri Tiplerine Dönüştürülme ve SQL'den C Veri Tiplerine Veri Dönüştürme bölümlerine bakınız: Veri Türleri.

Parametre Tipi Argümanı

Bu, Ek D: Veri Tipleri'nin SQL Veri Tipleri bölümünde listelenen değerlerden biri olmalı ya da sürücüye özgü bir değer olmalıdır. Bu argüman, IPD'nin SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE ve SQL_DESC_DATETIME_INTERVAL_CODE alanlarını belirler.

ParameterType argümanı datetime tanımlayıcılarından biriyse, IPD'nin SQL_DESC_TYPE alanı SQL_DATETIME, IPD'nin SQL_DESC_CONCISE_TYPE alanı concise datetime SQL veri tipine ayarlanır ve SQL_DESC_DATETIME_INTERVAL_CODE alanı uygun datetime alt kodu değerine ayarlanır.

ParameterType aralık tanımlayıcılarından biriyse, IPD'nin SQL_DESC_TYPE alanı SQL_INTERVAL olarak ayarlanır, IPD'nin SQL_DESC_CONCISE_TYPE alanı kısa SQL aralık veri tipine ayarlanır ve IPD'nin SQL_DESC_DATETIME_INTERVAL_CODE alanı uygun aralık alt koduna ayarlanır. IPD'nin SQL_DESC_DATETIME_INTERVAL_PRECISION alanı, varsa aralık öncesi hassasiyete ayarlanır ve SQL_DESC_PRECISION alanı ise varsa aralık saniyesi hassasiyetine ayarlanır. Eğer varsayılan değer SQL_DESC_DATETIME_INTERVAL_PRECISION veya SQL_DESC_PRECISION uygun değilse, uygulama bunu SQLSetDescField çağırarak açıkça ayarlamalıdır. Bu alanlardan herhangi biri hakkında daha fazla bilgi için SQLSetDescField sayfasına bakınız.

Eğer ValueType argümanı SQL_NUMERIC bir veri türüyse, varsayılan hassasiyet (sürücü tarafından tanımlanan) ve IPD'nin SQL_DESC_PRECISION ve SQL_DESC_SCALE alanlarında belirlenen varsayılan ölçek (0) veri için kullanılır. Varsayılan hassasiyet veya ölçek uygun değilse, uygulama tanımlayıcı alanını SQLSetDescField veya SQLSetDescRec çağrısıyla açıkça ayarlamalıdır.

Verinin nasıl dönüştürüldüğü hakkında bilgi için, Ek D'deki Veri C'den SQL Veri Tiplerine Dönüştürme ve SQL'den C Veri Tiplerine Veri Dönüştürme bölümlerine bakınız.

ColumnSize Argümanı

ColumnSize argümanı, parametre işaretçisine karşılık gelen sütunun veya ifadenin büyüklüğünü, o verinin uzunluğunu veya her ikisini belirtir. Bu argüman, SQL veri tipine ( ParameterType argümanı) bağlı olarak IPD'nin farklı alanlarını ayarlar. Bu eşleme için aşağıdaki kurallar geçerlidir:

  • ParameterType SQL_CHAR, SQL_VARCHAR, SQL_LONGVARCHAR, SQL_BINARY, SQL_VARBINARY, SQL_LONGVARBINARY veya kısa SQL tarih veya aralık veri tiplerinden biri ise, IPD'nin SQL_DESC_LENGTH alanı ColumnSize değerine ayarlanır. (Daha fazla bilgi için, Ek D: Veri Tipleri'ndeki Sütun Boyutu, Ondalık Rakamlar, Aktarım Oktet Uzunluğu ve Ekran Boyutu bölümlerine bakınız.)

  • ParameterType SQL_DECIMAL, SQL_NUMERIC, SQL_FLOAT, SQL_REAL veya SQL_DOUBLE ise, IPD'nin SQL_DESC_PRECISION alanı ColumnSize değerine ayarlanır.

  • Diğer veri türleri için ColumnSize argümanı göz ardı edilir.

Daha fazla bilgi için "Parametre Değerlerini Geçirme" bölümlerine bakınız ve "StrLen_or_IndPtr Argümanı"nda SQL_DATA_AT_EXEC bölümünü ekleyin.

DesimalDigits Argümanı

ParameterType SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP, SQL_INTERVAL_SECOND, SQL_INTERVAL_DAY_TO_SECOND, SQL_INTERVAL_HOUR_TO_SECOND veya SQL_INTERVAL_MINUTE_TO_SECOND ise, IPD'nin SQL_DESC_PRECISION alanı DecimalDigits olarak ayarlanır. ParametreType SQL_NUMERIC veya SQL_DECIMAL ise, IPD'nin SQL_DESC_SCALE alanı DenimalDigits olarak ayarlanır. Diğer tüm veri türleri için DenimalDigits argümanı göz ardı edilir.

ParameterValuePtr Argümanı

ParameterValuePtr argümanı, SQLExecute veya SQLExecDirect çağrıldığında parametrenin gerçek verisini içeren bir tamponu gösterir. Veri, ValueType argümanı tarafından belirtilen biçimde olmalıdır. Bu argüman, APD'nin SQL_DESC_DATA_PTR alanını belirler. Bir uygulama, *StrLen_or_IndPtr SQL_NULL_DATA veya SQL_DATA_AT_EXEC olduğu sürece, ParameterValuePtr argümanını null işaretçi olarak ayarlayabilir. (Bu sadece giriş veya giriş/çıkış parametreleri için geçerlidir.)

Eğer *StrLen_or_IndPtr SQL_LEN_DATA_AT_EXEC(uzunluk) makro veya SQL_DATA_AT_EXEC'nin sonucuysa, ParameterValuePtr uygulama tarafından tanımlanmış ve parametreyle ilişkilendirilen bir işaretçi değeridir. SQLParamData aracılığıyla uygulamaya geri gönderilir. Örneğin, ParameterValuePtr, parametre numarası, veriye işaret noktası veya uygulamanın giriş parametrelerini bağlamak için kullandığı bir yapıya işaret gibi sıfır olmayan bir token olabilir. Ancak, eğer parametre giriş/çıkış parametresi ise, ParameterValuePtr'nin çıkış değerinin saklanacağı bir tampona işaret etmelidir. SQL_ATTR_PARAMSET_SIZE ifadesi özniteliğindeki değer 1'den büyükse, uygulama SQL_ATTR_PARAMS_PROCESSED_PTR ifadesi özniteliğinin işaret ettiği değeri ParameterValuePtr argümanı ile birlikte kullanabilir. Örneğin, ParameterValuePtr bir değer dizisine işaret edebilir ve uygulama, SQL_ATTR_PARAMS_PROCESSED_PTR tarafından işaret edilen değeri kullanarak diziden doğru değeri alabilir. Daha fazla bilgi için, bu bölümün ilerleyen bölümlerinde "Parametre Değerlerini Geçirme" bölümüne bakınız.

InputOutputType argümanı SQL_PARAM_INPUT_OUTPUT veya SQL_PARAM_OUTPUT ise, ParameterValuePtr sürücünün çıkış değerini döndürdüğü bir tampona işaret eder. Prosedür bir veya daha fazla sonuç seti döndürüyorsa, *ParameterValuePtr tamponunun tüm sonuç kümeleri/satır sayıları işlenene kadar ayarlanacağı garanti edilmez. Buffer, işlem tamamlanana kadar ayarlanmazsa, çıktı parametreleri ve dönüş değerleri SQLMoreResults SQL_NO_DATA döndürene kadar erişilebilir değildir. SQLCloseCursor veya SQLFreeStmt ile SQL_CLOSE seçeneği çağrıldığında bu değerler atılır.

SQL_ATTR_PARAMSET_SIZE ifadesi özniteliğindeki değer 1'den büyükse, ParameterValuePtr bir diziyi gösterir. Tek bir SQL ifadesi, bir giriş veya giriş/çıktı parametresi için tüm giriş değer dizisini işler ve bir giriş/çıktı veya çıktı parametresi için bir dizi çıktı değeri döndürür.

BufferLength Argümanı

Karakter ve ikili C verileri için, BufferLength argümanı *ParameterValuePtr tamponunun uzunluğunu (eğer tek bir eleman ise) veya *ParameterValuePtr dizisinde bir elemanın uzunluğunu (SQL_ATTR_PARAMSET_SIZE ifadesindeki değer 1'den büyükse) belirtir. Bu argüman, APD'nin SQL_DESC_OCTET_LENGTH rekor alanını belirler. Uygulama birden fazla değer belirliyorsa, BufferLength *ParameterValuePtr dizisinde hem giriş hem çıkışta değerlerin konumunu belirlemek için kullanılır. Giriş/çıkış ve çıkış parametreleri için, çıkışta karakter ve ikili C verilerinin kesilip kesilmediğini belirlemek için kullanılır:

  • C karakteri verisi için, döndürülebilecek bayt sayısı BufferLength'den büyük veya eşitse, *ParameterValuePtr'deki veri, null-sonlandırma karakterinin uzunluğu BufferLength'e kısaltılır ve sürücü tarafından null-sonlandırılır.

  • İkili C veri için, döndürülebilecek bayt sayısı BufferLength'den fazlaysa, *ParameterValuePtr'deki veri BufferLength baytlarına kısılır.

Diğer tüm C veri türleri için BufferLength argümanı göz ardı edilir. *ParameterValuePtr tamponunun uzunluğu (eğer tek bir eleman ise) veya *ParameterValuePtr dizisinde bir elemanın uzunluğu (uygulama her parametre için birden fazla değer belirtmek amacıyla SQLSetStmtAttr argümanı SQL_ATTR_PARAMSET_SIZE Attribute argümanı çağırıyorsa) C veri türünün uzunluğu olarak kabul edilir.

Akışlı çıktı veya akışlı giriş/çıkış parametreleri için, BufferLength argümanı göz ardı edilir çünkü buffer uzunluğu SQLGetData'da belirtilmiştir.

Uyarı

Bir ODBC 1.0 uygulaması SQLSetParam'ı bir ODBC 3'te çağırdığında. x sürücüsü ile Sürücü Yöneticisi bunu SQLBindParameter çağrısına dönüştürür ve burada BufferLength argümanı her zaman SQL_SETPARAM_VALUE_MAX olur. Çünkü Sürücü Yöneticisi ODBC 3 durumunda bir hata döndürür. x uygulaması BufferLength'i SQL_SETPARAM_VALUE_MAX, yani ODBC 3'e ayarlar. x sürücüsü, ODBC 1.0 uygulaması tarafından çağrıldığını belirlemek için bunu kullanabilir.

Uyarı

SQLSetParam'da, bir uygulamanın *ParameterValuePtr tamponunun uzunluğunu belirtmesi ve sürücünün karakter veya ikili veri döndürmesi için nasıl belirtilmesi ve bir uygulamanın sürücüye karakter veya ikili parametre değerlerinden oluşan bir diziyi gönderme şekli sürücü tarafından tanımlanır.

StrLen_or_IndPtr Argüman

StrLen_or_IndPtr argümanı, SQLExecute veya SQLExecDirect çağrıldığında aşağıdaki tamponlardan birini içeren bir tamponu gösterir. (Bu argüman, uygulama parametre işaretlerinin SQL_DESC_OCTET_LENGTH_PTR ve SQL_DESC_INDICATOR_PTR kayıt alanlarını ayarlar.)

  • *ParameterValuePtr. Bu, karakter veya ikili C verileri dışında göz ardı edilir.

  • SQL_NTS. Parametre değeri null-terminated bir dizidir.

  • SQL_NULL_DATA. Parametre değeri NULL'dur.

  • SQL_DEFAULT_PARAM. Bir prosedür, uygulamadan alınan bir değer yerine bir parametrin varsayılan değerini kullanmaktır. Bu değer yalnızca ODBC kanonik sözdizimi ile çağrılan bir prosedürde geçerlidir ve yalnızca InputOutputType argümanı SQL_PARAM_INPUT, SQL_PARAM_INPUT_OUTPUT veya SQL_PARAM_INPUT_OUTPUT_STREAM ise geçerlidir. *StrLen_or_IndPtr SQL_DEFAULT_PARAM olduğunda, ValueType, ParameterType, ColumnSize, DecimalDigits, BufferLength ve ParameterValuePtr argümanları giriş parametreleri için göz ardı edilir ve yalnızca giriş/çıkış parametreleri için çıktı parametre değerini tanımlamak için kullanılır.

  • SQL_LEN_DATA_AT_EXEC(uzunluk) makrosunun sonucu. Parametre için veri SQLPutData ile gönderilir. ParameterType argümanı SQL_LONGVARBINARY, SQL_LONGVARCHAR veya uzun, veri kaynağına özgü bir veri tipi ise ve sürücü SQLGetInfo'daki SQL_NEED_LONG_DATA_LEN bilgi tipi için "Y" dönerse, uzunluk parametre için gönderilecek bayt veri sayısıdır; aksi takdirde, uzunluk negatif olmayan bir değer olmalı ve göz ardı edilir. Daha fazla bilgi için, bu bölümün ilerleyen bölümlerinde "Parametre Değerlerini Geçirme" bölümüne bakınız.

    Örneğin, bir veya daha fazla çağrıda SQLPutData ile 10.000 bayt verinin gönderileceğini belirtmek için, SQL_LONGVARCHAR parametresi için bir uygulama *StrLen_or_IndPtr'i SQL_LEN_DATA_AT_EXEC(10000) olarak ayarlar.

  • SQL_DATA_AT_EXEC. Parametre için veri SQLPutData ile gönderilir. Bu değer, ODBC 1.0 uygulamaları tarafından ODBC 3 çağrıldıklarında kullanılır. X sürücüler. Daha fazla bilgi için, bu bölümün ilerleyen bölümlerinde "Parametre Değerlerini Geçirme" bölümüne bakınız.

Eğer StrLen_or_IndPtr bir null işaretçiyse, sürücü tüm giriş parametre değerlerinin NULL olmadığını ve karakter ile ikili verinin null-sonlanmış olduğunu varsayar. InputOutputType SQL_PARAM_OUTPUT veya SQL_PARAM_OUTPUT_STREAM ise ve ParameterValuePtr ile StrLen_or_IndPtr ikisi de null işaretçiyse, sürücü çıkış değerini atar.

Uyarı

Uygulama geliştiricileri, parametrenin veri tipi SQL_C_BINARY olduğunda StrLen_or_IndPtr için null işaretçi belirtmeleri kesinlikle tavsiye edilmiyor. Bir sürücünün beklenmedik şekilde SQL_C_BINARY veriyi kesmemesini sağlamak için, StrLen_or_IndPtr geçerli bir uzunluk değerine işaret içermelidir.

InputOutputType argümanı SQL_PARAM_INPUT_OUTPUT, SQL_PARAM_OUTPUT, SQL_PARAM_INPUT_OUTPUT_STREAM veya SQL_PARAM_OUTPUT_STREAM ise, StrLen_or_IndPtr sürücünün SQL_NULL_DATA, *ParameterValuePtr'de döndürülebilecek bayt sayısını (karakter verisinin null-termination baytı hariç) veya SQL_NO_TOTAL (döndürülebilecek bayt sayısı belirlenemiyorsa) döndürdüğü bir tampona işaret eder. Prosedür bir veya daha fazla sonuç seti döndürüyorsa, *StrLen_or_IndPtr tamponunun tüm sonuçlar alınana kadar ayarlanacağı garanti edilmez.

SQL_ATTR_PARAMSET_SIZE ifadesi özniteliğindeki değer 1'den büyükse, StrLen_or_IndPtr bir SQLLEN değer dizisine işaret eder. Bunlar, bu bölümde daha önce listelenen değerlerden herhangi biri olabilir ve tek bir SQL ifadesi ile işlenilir.

Parametre Değerlerinin Aktarılması

Bir uygulama, bir parametrenin değerini *ParameterValuePtr buffer'da veya SQLPutData'ya bir veya daha fazla çağrı ile iletebilir. Verileri SQLPutData ile iletilen parametreler, data-an-execution parametreleri olarak bilinir. Bunlar genellikle SQL_LONGVARBINARY ve SQL_LONGVARCHAR parametreleri için veri göndermek için kullanılır ve diğer parametrelerle karıştırılabilir.

Parametre değerlerini geçirmek için bir uygulama aşağıdaki adımlar dizisini gerçekleştirir:

  1. Her parametre için SQLBindParameter çağırarak parametrin değeri (ParameterValuePtr argümanı) ve uzunluk/gösterge (StrLen_or_IndPtr argümanı) için tamponlar bağlar. Veri yürütme parametreleri için, ParameterValuePtr, uygulama tarafından tanımlanan bir işaret değeridir; örneğin bir parametre numarası veya veriye işaretçi. Değer daha sonra geri dönecek ve parametreyi tanımlamak için kullanılabilir.

  2. Giriş ve giriş/çıkış parametreleri için değerleri *ParameterValuePtr ve *StrLen_or_IndPtr tamponlarına yerleştirir:

    • Normal parametreler için uygulama, parametre değerini *ParameterValuePtr tamponuna, bu değerin uzunluğunu ise *StrLen_or_IndPtr tamponuna yerleştirir. Daha fazla bilgi için Parametre Değerlerinin Ayarlanması bölümünü inceleyebilirsiniz.

    • Yürütme sırasında veri parametreleri için, uygulama SQL_LEN_DATA_AT_EXEC(uzunluk) makrosunun sonucunu (ODBC 2.0 sürücüsü çağrıldığında) *StrLen_or_IndPtr tamponuna koyar.

  3. SQL ifadesini çalıştırmak için SQLExecute veya SQLExecDirect çağırır.

    • Eğer yürütme sırasında veri parametreleri yoksa, süreç tamamlanmış sayılır.

    • Eğer herhangi bir veri yürütme parametresi varsa, fonksiyon SQL_NEED_DATA döndürür.

  4. SQLParamData'yı çağırarak SQLBindParametri'ninParameterValuePtr argümanında belirtilen uygulama tanımlı değeri elde eder; bu değer ilk işlenecek veri sırasında parametre için kullanılır. SQLParamData SQL_NEED_DATA döndürür.

    Uyarı

    Data-an-execut parametreleri data-an-execution sütunlarına benzese de, SQLParamData tarafından verilen değer her biri için farklıdır. Data-at-execution parametreleri, SQL ifadesindeki parametrelerdir; bu parametreler SQL ifadesi SQLExecDirect veya SQLExecute ile yürütüldüğünde SQLPutData ile gönderilir. SQLBindParameter ile bağlılar. SQLParamData tarafından döndürülen değer, ParameterValuePtr argümanında SQLBindParametri'ye gönderilen bir işaretçi değeridir. Yürütülme sırasında veri sütunları, bir satır güncellendiğinde veya SQLBulkOperations ile eklendiğinde veya SQLSetPos ile güncellendiğinde verilerin SQLPutData ile gönderileceği bir sıra kümesindeki sütunlardır. Bunlar SQLBindCol ile bağlıdır. SQLParamData tarafından döndürülen değer, *TargetValuePtr buffer'daki (SQLBindCol çağrısıyla ayarlanan) satır adresidir.

  5. Parametre için veri göndermek amacıyla SQLPutData'yı bir veya daha fazla kez çağırır. Veri değeri SQLPutData'da belirtilen *ParameterValuePtr tamponundan büyükse, birden fazla çağrı gereklidir; Aynı parametre için SQLPutData'ya birden fazla çağrı yalnızca karakter, ikili veya veri kaynağına özgü veri tipine sahip bir sütuna karakter C verisi gönderildiğinde veya ikili C verisi karakter, ikili veya veri kaynağına özgü veri tipine sahip bir sütuna gönderildiğinde izin verilir.

  6. Tüm verilerin parametre için gönderildiğini bildirmek için tekrar SQLParamData çağırır.

    • Daha fazla data-an-execut parametresi varsa, SQLParamData SQL_NEED_DATA ve bir sonraki işleme verisi için uygulama tanımlı değeri döndürür. Başvuru 4. ve 5. adımları tekrarlar.

    • Eğer başka veri yürütme parametresi kalmazsa, süreç tamamlanmış olur. Eğer ifade başarıyla çalıştırıldıysa, SQLParamData SQL_SUCCESS veya SQL_SUCCESS_WITH_INFO döner; Eğer uygulama başarısız olursa, SQL_ERROR döner. Bu noktada, SQLParamData ifadeyi çalıştırmak için kullanılan fonksiyon (SQLExecDirect veya SQLExecute) tarafından döndürülebilecek herhangi bir SQLSTATE'i döndürebilir.

      Herhangi bir giriş/çıkış veya çıktı parametreleri için çıktı değerleri, uygulama ifadeyle oluşturulan tüm sonuç kümelerini aldıktan sonra *ParameterValuePtr ve *StrLen_or_IndPtr tamponlarında mevcuttur.

SQLExecute veya SQLExecDirect çağrıldığında, ifade SQL_NEED_DATA bir duruma getirilir. Bu noktada, uygulama yalnızca ifadeye bağlı ifade veya bağlantı tutamacıile SQLCancel, SQLGetDiagField, SQLGetDiagRec, SQLGetFunctions, SQLParamData veya SQLPutData çağrısı yapabilir. Eğer başka bir fonksiyon ifadesi veya ifadeye bağlı bağlantı çağrılarsa, fonksiyon SQLSTATE HY010 (Fonksiyon dizisi hatası) döndürür. Bildirim, SQLParamData veya SQLPutData hata döndürdüğünde, SQLParamData SQL_SUCCESS veya SQL_SUCCESS_WITH_INFO döndürdüğünde veya ilanet iptal edildiğinde SQL_NEED_DATA durumundan ayrılır.

Eğer uygulama sürücünün hâlâ veri çalıştırma parametreleri için veriye ihtiyacı varken SQLCancel çağrısı yaparsa, sürücü özet yürütmesini iptal eder; uygulama daha sonra tekrar SQLExecute veya SQLExecDirect çağırabilir.

Akışlı Çıkış Parametrelerinin Alınması

Bir uygulama InputOutputType'ı SQL_PARAM_INPUT_OUTPUT_STREAM veya SQL_PARAM_OUTPUT_STREAM olarak ayarladığında, çıktı parametre değeri SQLGetData'ya bir veya daha fazla çağrı ile alınmalıdır. Sürücünün uygulamaya geri dönmesi gereken akışlı çıkış parametre değeri olduğunda, aşağıdaki fonksiyonlara çağrı olarak SQL_PARAM_DATA_AVAILABLE döner: SQLMoreResults, SQLExecute ve SQLExecDirect. Bir uygulama, hangi parametre değerinin mevcut olduğunu belirlemek için SQLParamData çağırır.

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.

Parametre Dizilerini Kullanma

Bir uygulama, parametre işaretleyicileriyle bir ifade hazırladığında ve bir dizi parametre ilettiğinde, bunun iki farklı şekilde yürütülebileceği vardır. Bir yol, sürücünün arka uçun dizi işleme yeteneklerine güvenmesi; bu durumda parametre dizisiyle birlikte tüm ifade tek bir atomik birim olarak ele alınır. Oracle, dizi işleme yeteneklerini destekleyen bir veri kaynağına örnektir. Bu özelliği uygulamanın bir diğer yolu ise, sürücünün parametre dizisindeki her parametre seti için bir SQL ifadesi içeren bir grup SQL ifadesi oluşturması ve toplu işlemi başlatmasıdır. Parametreler dizileri, WHERE CURRENT ifadesi ile UPDATE kullanılamaz.

Bir parametre dizisi işlendiğinde, her parametre kümesi için bir tane olan bireysel sonuç kümeleri/satır sayıları kullanılabilir veya sonuç kümeleri/satır sayıları bir topa toplanabilir. SQLGetInfo'daki SQL_PARAM_ARRAY_ROW_COUNTS seçeneği, her parametre seti için satır sayılarının mevcut olup olmadığını (SQL_PARC_BATCH) veya sadece bir satır sayısının mevcut olup olmadığını (SQL_PARC_NO_BATCH) gösterir.

SQLGetInfo'daki SQL_PARAM_ARRAY_SELECTS seçeneği, her parametre kümesi için bir sonuç kümesi (SQL_PAS_BATCH) veya sadece bir sonuç kümesi (SQL_PAS_NO_BATCH) için mevcut olup olmadığını gösterir. Sürücü, bir dizi parametre ile sonuç kümesi üreten bir ifadenin yürütülmesine izin vermezse, SQL_PARAM_ARRAY_SELECTS SQL_PAS_NO_SELECT döndürür.

Daha fazla bilgi için SQLGetInfo Fonksiyonu bölümüne bakınız.

Parametre dizilerini desteklemek için, SQL_ATTR_PARAMSET_SIZE ifadesi özniteliği her parametre için değer sayısını belirtecek şekilde ayarlanmıştır. Alan 1'den büyükse, APD'nin SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR ve SQL_DESC_OCTET_LENGTH_PTR alanları dizilere işaret etmelidir. Her dizinin kardinalitesi SQL_ATTR_PARAMSET_SIZE değerine eşittir.

APD'nin SQL_DESC_ROWS_PROCESSED_PTR alanı, hata kümeleri dahil işlenmiş parametre kümelerini içeren bir tampona işaret eder. Her parametre seti işlendikçe, sürücü tamponda yeni bir değer saklar. Bu null işaretçiyse hiçbir sayı geri dönmez. Parametre dizileri kullanıldığında, APD'nin SQL_DESC_ROWS_PROCESSED_PTR alanının işaret ettiği değer, ayar fonksiyonu tarafından döndürülse bile SQL_ERROR doldurulur. Eğer SQL_NEED_DATA dönerse, APD'nin SQL_DESC_ROWS_PROCESSED_PTR alanının işaret ettiği değer, işlenen parametre kümesine ayarlanır.

Bir parametre dizisi bağlandığında ve UPDATE WHERE CURRENT OF ifadesi yürütüldüğünde ne olur, sürücü tarafından tanımlanır.

Column-Wise Parametre Bağlama

Sütun bazında bağlamada, uygulama her parametreye ayrı parametre ve uzunluk/gösterge dizilerini bağlar.

Sütun bazında bağlama kullanmak için uygulama önce SQL_ATTR_PARAM_BIND_TYPE ifadesi özniteliğini SQL_PARAM_BIND_BY_COLUMN olarak ayar. (Bu varsayılan durumdur.) Her sütunun bağlanması için uygulama aşağıdaki adımları gerçekleştirir:

  1. Bir parametre tampon dizisi tahsis eder.

  2. Uzunluk/gösterge tamponları dizisi tahsis eder.

    Uyarı

    Uygulama sütun-bazında bağlanma kullanılırken doğrudan tanımlayıcılara yazarsa, uzunluk ve gösterge verileri için ayrı dizilerle kullanılabilir.

  3. SQLBindParameter argümanlarını aşağıdaki argümanlarla çağırır:

    • ValueType , parametre tamponu dizisinde tek bir elemanın C tipidir.

    • ParameterType , parametrenin SQL tipidir.

    • ParameterValuePtr, parametre tampon dizisinin adresidir.

    • BufferLength , parametre tampon dizisinde tek bir elemanın boyutudur. BufferLength argümanı, veri sabit uzunlukta verisi olduğunda göz ardı edilir.

    • StrLen_or_IndPtr , uzunluk/gösterge dizisi adresidir.

Bu bilgilerin nasıl kullanıldığına dair daha fazla bilgi için, bu bölümün ilerleyen bölümlerinde "Yorumlar" bölümünde "ParameterValuePtr Argümanı"na bakınız. Parametrelerin sütun-bazında bağlanması hakkında daha fazla bilgi için Parametrelerin Bağlanma Dizileri sayfasına bakınız.

Row-Wise Parametre Bağlama

Satır bazında bağlamada, uygulama her parametre için parametre ve uzunluk/gösterge tamponlarını içeren bir yapı tanımlar.

Satır bazında bağlama kullanmak için uygulama aşağıdaki adımları gerçekleştirir:

  1. Tek bir parametre setini (hem parametre hem de uzunluk/gösterge tamponları dahil) tutacak bir yapı tanımlar ve bu yapılardan oluşan bir diziyi tahsis eder.

    Uyarı

    Eğer uygulama doğrudan tanımlayıcılara yazarsa sıralı bağlama kullanılırsa, uzunluk ve gösterge verileri için ayrı alanlar kullanılabilir.

  2. SQL_ATTR_PARAM_BIND_TYPE ifadesi niteliğini, tek bir parametre kümesi içeren yapının boyutuna veya parametrelerin bağlanacağı bir tampon örneğinin boyutuna ayarlar. Uzunluk, tüm sınırlı parametreler için boşluk ve yapının veya tamponun herhangi bir dolgusunu içermelidir; böylece bir sınır parametresinin adresi belirlenen uzunlukla artırıldığında, sonuç aynı parametrenin bir sonraki satırdaki başlangıcına işaret eder. ANSI C'de sizeof ' operatörünü kullandığınızda, bu davranış garanti edilir.

  3. Her parametrenin bağlanması için aşağıdaki argümanlarla SQLBindParameter çağırır:

    • ValueType , parametre tampon üyesinin sütuna bağlanacak türüdür.

    • ParameterType , parametrenin SQL tipidir.

    • ParameterValuePtr, ilk dizi öğesindeki parametre tampon üyesinin adresidir.

    • BufferLength , parametre tampon üyesinin boyutudur.

    • StrLen_or_IndPtr , bağlanacak uzunluk/gösterge üyesinin adresidir.

Bu bilgilerin nasıl kullanıldığına dair daha fazla bilgi için, bu bölümün ilerleyen bölümlerinde "ParameterValuePtr Argümanı" bölümüne bakınız. Parametrelerin satır bazında bağlanması hakkında daha fazla bilgi için Parametrelerin Bağlanma Dizileri sayfasına bakınız.

Hata Bilgisi

Bir sürücü parametre dizilerini toplu olarak uygulamazsa (SQL_PARAM_ARRAY_ROW_COUNTS seçeneği SQL_PARC_NO_BATCH'a eşittir), hata durumları tek bir ifadenin yürütülmüş gibi ele alınır. Sürücü parametre dizilerini toplu olarak uygularsa, bir uygulama IPD'nin SQL_DESC_ARRAY_STATUS_PTR başlık alanını kullanarak SQL ifadesinin hangi parametresinin veya bir parametre dizisinde hangi parametrenin SQLExecDirect veya SQLExecute'un hata döndürdüğünü belirleyebilir. Bu alan, parametre değerlerinin her satırı için durum bilgisini içerir. Alan bir hata olduğunu gösteriyorsa, tanı veri yapısındaki alanlar başarısız olan parametrenin satır ve parametre numarasını gösterir. Dizideki eleman sayısı, APD'deki SQL_DESC_ARRAY_SIZE başlık alanı tarafından tanımlanır ve bu alan SQL_ATTR_PARAMSET_SIZE ifadesi özniteliğiyle ayarlanabilir.

Uyarı

APD'deki SQL_DESC_ARRAY_STATUS_PTR başlık alanı parametreleri görmezden gelmek için kullanılır. Parametreleri görmezden gelme hakkında daha fazla bilgi için bir sonraki bölüme bakınız: "Bir Parametreler Kümesi Görmezden Gelinme."

SQLExecute veya SQLExecDirect SQL_ERROR döndürdüğünde, IPD'deki SQL_DESC_ARRAY_STATUS_PTR alanının işaret ettiği dizide bulunan öğeler SQL_PARAM_ERROR, SQL_PARAM_SUCCESS, SQL_PARAM_SUCCESS_WITH_INFO, SQL_PARAM_UNUSED veya SQL_PARAM_DIAG_UNAVAILABLE içerir.

Bu dizinin her elemanı için, tanı veri yapısı bir veya daha fazla durum kaydı içerir. Yapının SQL_DIAG_ROW_NUMBER alanı, hataya neden olan parametre değerlerinin satır numarasını gösterir. Hataya neden olan parametre sırasındaki belirli parametreyi belirlemek mümkünse, parametre numarası SQL_DIAG_COLUMN_NUMBER alanına girilir.

SQL_PARAM_UNUSED, önceki bir parametrede SQLExecute veya SQLExecDirect'in iptal edilmesine neden olan hata nedeniyle bir parametre kullanılmadığında girilir. Örneğin, 50 parametre varsa ve kırkıncı parametre seti çalıştırılırken SQLExecute veya SQLExecDirect'in iptal edilmesine neden olan bir hata meydana geldiyse, 41'den 50'ye kadar olan parametreler için durum dizisine SQL_PARAM_UNUSED girilir.

SQL_PARAM_DIAG_UNAVAILABLE, sürücü parametre dizilerini monolitik bir birim olarak ele aldığında girilir, böylece bu bireysel parametre seviyesindeki hata bilgisi üretmez.

Tek bir parametre setinin işlenmesindeki bazı hatalar, dizide sonraki parametre kümelerinin işlenmesini durdurur. Diğer hatalar sonraki parametrelerin işlenmesini etkilemez. İşlemeyi durduracak hatalar sürücü tarafından tanımlanır. İşlem durdurulmazsa, dizide tüm parametreler işleniyor, hata sonucu SQL_SUCCESS_WITH_INFO döner, SQL_ATTR_PARAMS_PROCESSED_PTR ile tanımlanan tampon, hata kümelerini de içeren toplam işlem gören parametre kümelerine (SQL_ATTR_PARAMSET_SIZE ifadesi özniteliği tarafından tanımlanan) ayarlanır.

Caution

Bir parametre dizisi işlenmesinde hata olduğunda ODBC davranışı ODBC 3'te farklıdır. ODBC 2'deki kadar çok daha fazla olduğunu belirtti. x. ODBC 2'de. x, fonksiyon SQL_ERROR geri döndü ve işleme durdu. SQLParamOptions'ınpirow argümanıyla işaret edilen tampon, hata satırının numarasını içeriyordu. ODBC 3'te. x, fonksiyon SQL_SUCCESS_WITH_INFO döndürür ve işleme ya durabilir ya da devam edebilir. Devam ederse, SQL_ATTR_PARAMS_PROCESSED_PTR tarafından belirtilen tampon, hata ile sonuçlanan parametreler dahil olmak üzere işlenen tüm parametrelerin değerine ayarlanır. Bu davranış değişikliği mevcut uygulamalar için sorunlara yol açabilir.

SQLExecute veya SQLExecDirect, parametre dizisinde tüm parametre setlerinin işlenmesini tamamlamadan önce geri döndüğünde, örneğin SQL_ERROR veya SQL_NEED_DATA döndürüldüğünde, durum dizisi zaten işlenmiş parametreler için durumları içerir. IPD'deki SQL_DESC_ROWS_PROCESSED_PTR alanının işaret ettiği konum, SQL_ERROR veya SQL_NEED_DATA hata koduna neden olan parametre dizisinde satır numarasını içerir. Bir parametre dizisi SELECT ifadesine gönderildiğinde, durum dizisi değerlerinin kullanılabilirliği sürücü tarafından tanımlanır; Bunlar ifade yapıldıktan sonra veya sonuç setleri alındığında kullanılabilir olabilir.

Bir Parametreler Kümesi Görmezden Gelmek

APD'nin SQL_DESC_ARRAY_STATUS_PTR alanı (SQL_ATTR_PARAM_STATUS_PTR ifadesi özniteliği tarafından belirlendiği şekilde), bir SQL ifadesindeki sınırlı parametreler kümesinin göz ardı edilmesi gerektiğini belirtmek için kullanılabilir. Sürücüyü yürütme sırasında bir veya daha fazla parametre setini görmezden gelmesini sağlamak için uygulama şu adımları takip etmelidir:

  1. APD'nin SQL_DESC_ARRAY_STATUS_PTR başlık alanını, durum bilgisi içeren SQLUSMALLINT değerlerinden oluşan bir diziye işaret etmek için SQLSetDescField çağırın. Bu alan ayrıca SQLSetStmtAttr çağrılarak da ayarlanabilir; SQL_ATTR_PARAM_OPERATION_PTR Öznitelikle bir uygulama, bir uygulamanın tanımlayıcı tutacağı elde etmeden alanı ayarlamasına olanak tanır.

  2. APD'nin SQL_DESC_ARRAY_STATUS_PTR alanı tarafından tanımlanan dizinin her elemanını iki değerden birine ayarlayın:

    • SQL_PARAM_IGNORE, satırın ifade yürütmesinden hariç tutulduğunu belirtmek için.

    • SQL_PARAM_PROCEED, satırın özet yürütülmesine dahil edildiğini belirtmek için.

  3. Hazırlanmış ifadeyi çalıştırmak için SQLExecDirect veya SQLExecute çağırın.

APD'nin SQL_DESC_ARRAY_STATUS_PTR alanı tarafından tanımlanan diziye aşağıdaki kurallar uygulanır:

  • İşaretçi varsayılan olarak null olarak ayarlanmıştır.

  • Eğer işaretçi null ise, tüm parametreler kümeleri kullanılır; sanki tüm elemanlar SQL_ROW_PROCEED olarak ayarlanmış gibi.

  • Bir elemanı SQL_PARAM_PROCEED olarak ayarlamak, işlemin o belirli parametre kümesini kullanacağını garanti etmez.

  • SQL_PARAM_PROCEED, başlık dosyasında 0 olarak tanımlanır.

Bir uygulama, APD'deki SQL_DESC_ARRAY_STATUS_PTR alanını, IRD'deki SQL_DESC_ARRAY_STATUS_PTR alanının işaret ettiği diziyle aynı diziye yönlendirebilir. Bu, parametreleri satır verisine bağlamakta faydalıdır. Parametreler, satır verisinin durumuna göre göz ardı edilebilir. SQL_PARAM_IGNORE'nin yanı sıra, aşağıdaki kodlar bir SQL ifadesindeki bir parametrenin göz ardı edilmesine neden olur: SQL_ROW_DELETED, SQL_ROW_UPDATED ve SQL_ROW_ERROR. SQL_PARAM_PROCEED'ye ek olarak, aşağıdaki kodlar SQL ifadesinin ilerlemesini sağlar: SQL_ROW_SUCCESS, SQL_ROW_SUCCESS_WITH_INFO ve SQL_ROW_ADDED.

Yeniden Bağlanma Parametreleri

Bir uygulama, bir bağlamayı değiştirmek için iki işlemden birini gerçekleştirebilir:

  • Zaten bağlı olan bir sütun için yeni bir bağlama belirtmek üzere SQLBindParameter çağırın. Sürücü, eski bağlamayı yenisiyle üzerine yazar.

  • SQLBindParameter'e bağlanma çağrısıyla belirtilen buffer adresine eklenecek bir ofset belirtin. Daha fazla bilgi için bir sonraki bölüme bakınız: "Ofsetlerle Yeniden Bağlama."

Ofsetlerle yeniden bağlanma

Parametrelerin yeniden bağlanması özellikle bir uygulamanın birçok parametre içeren bir tampon alanı kurulumu olduğunda ancak SQLExecDirect veya SQLExecute çağrısı sadece birkaç parametreyi kullandığında faydalıdır. Tampon alanında kalan alan, mevcut bağlamayı bir ofset ile değiştirerek bir sonraki parametre seti için kullanılabilir.

APD'deki SQL_DESC_BIND_OFFSET_PTR başlık alanı bağlanma ofsetini gösterir. Alan null değilse, sürücü işaretçiyi referanstan çıkarır ve SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR ve SQL_DESC_OCTET_LENGTH_PTR alanlarındaki değerlerin hiçbiri null işaretçi değilse, uygulama sırasında tanımlayıcı kayıtlarındaki bu alanlara referans dereference'ı değeri ekler. Yeni işaretçi değerleri, SQL ifadeleri çalıştırıldığında kullanılır. Ofset, yeniden bağlandıktan sonra da geçerli kalır. SQL_DESC_BIND_OFFSET_PTR, ofsetin kendisi yerine ofset'e işaret ettiği için, bir uygulama tanımlayıcı alanını değiştirmek için SQLSetDescField veya SQLSetDescRec çağırmadan doğrudan ofseti değiştirebilir. İşaretçi varsayılan olarak null olarak ayarlanmıştır. ARD'nin SQL_DESC_BIND_OFFSET_PTR alanı, SQLSetDescField çağrısı ile veya fAttribute SQL_ATTR_PARAM_BIND_OFFSET_PTR olan SQLSetStmtAttr çağrısıyla ayarlanabilir.

Bağlama ofseti her zaman doğrudan SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR ve SQL_DESC_OCTET_LENGTH_PTR alanlarındaki değerlere eklenir. Eğer ofset farklı bir değere değiştirilirse, yeni değer yine de her tanımlayıcı alanındaki değere doğrudan eklenir. Yeni ofset, alan değeri ile önceki kaymaların toplamına eklenmez.

Tanımlayıcı

Bir parametrin nasıl sınırlandırıldığı, APD ve IPD'lerin alanları tarafından belirlenir. SQLBindParameter içindeki argümanlar, bu tanımlayıcı alanları ayarlamak için kullanılır. Alanlar ayrıca SQLSetDescField fonksiyonları tarafından ayarlanabilir, ancak SQLBindParameter kullanımı daha verimlidir çünkü uygulama SQLBindParameter'i çağırmak için tanımlayıcı tutamacı edinmek zorunda değildir.

Caution

Bir ifade için SQLBindParameter çağrısı diğer ifadeleri etkileyebilir. Bu, ifadeyle ilişkili ARD açıkça tahsis edildiğinde ve diğer ifadelerle de ilişkilendirildiğinde gerçekleşir. SQLBindParameter APD alanlarını değiştirdiği için, bu değişiklikler bu tanımlayıcıya bağlı tüm i'leler için geçerlidir. Eğer bu gerekli davranış değilse, uygulama SQLBindParameter'i çağırmadan önce bu tanımlayıcıyı diğer ifadelerden ayırmalıdır.

Kavramsal olarak, SQLBindParameter aşağıdaki adımları sırayla gerçekleştirir:

  1. APD tutamacını elde etmek için SQLGetStmtAttr çağırır.

  2. APD'nin SQL_DESC_COUNT alanını almak için SQLGetDescField çağırır ve ColumnNumber argümanının değeri SQL_DESC_COUNT değerini aşarsa, SQLSetDescField çağrısı yaparak SQL_DESC_COUNT değerini ColumnNumber'a çıkarır.

  3. APD'nin aşağıdaki alanlarına değerler ataymak için SQLSetDescField'ı birden fazla kez çağırır:

    • SQL_DESC_TYPE ve SQL_DESC_CONCISE_TYPE ValueType değerine ayar, ancak ValueType bir tarih veya aralık alt tipinin kısa tanımlayıcılarından biri ise, SQL_DESC_TYPE'i sırasıyla SQL_DATETIME veya SQL_INTERVAL'a ayar, kısa tanımlayıcıya SQL_DESC_CONCISE_TYPE ve karşılık gelen tarih saati veya aralık alt koduna SQL_DESC_DATETIME_INTERVAL_CODE ayarlar.

    • SQL_DESC_OCTET_LENGTH alanını BufferLength değerine ayarlar.

    • SQL_DESC_DATA_PTR alanını ParameterValue değerine ayarlar.

    • SQL_DESC_OCTET_LENGTH_PTR alanını StrLen_or_Ind değerine ayarlar.

    • SQL_DESC_INDICATOR_PTR alanını da StrLen_or_Ind değerine ayarlar.

    StrLen_or_Ind parametresi hem gösterge bilgisini hem de parametre değerinin uzunluğunu belirtir.

  4. IPD tutamacını elde etmek için SQLGetStmtAttr çağırır.

  5. IPD'nin SQL_DESC_COUNT alanını almak için SQLGetDescField çağırır ve ColumnNumber argümanının değeri SQL_DESC_COUNT değerini aşarsa, SQLSetDescField çağrısı yaparak SQL_DESC_COUNT değerini ColumnNumber'a çıkarır.

  6. IPD'nin aşağıdaki alanlarına değerler ataymak için SQLSetDescField'ı birden fazla kez çağırır:

    • ParameterType değerine SQL_DESC_TYPE ve SQL_DESC_CONCISE_TYPE ayarlar, ancak ParameterType bir tarih saati veya aralık alt tipinin kısa tanımlayıcılarından biriyse, sırasıyla SQL_DESC_TYPE SQL_DATETIME veya SQL_INTERVAL'a ayarlar, kısa tanımlayıcıya SQL_DESC_CONCISE_TYPE ayarlar ve ilgili tarih saati veya aralık alt koduna SQL_DESC_DATETIME_INTERVAL_CODE ayarlar.

    • ParameterType için uygun şekilde SQL_DESC_LENGTH, SQL_DESC_PRECISION ve SQL_DESC_DATETIME_INTERVAL_PRECISION'den birini veya birkaçını ayarlar.

    • SQL_DESC_SCALE DecimalDigits değerine ayar.

SQLBindParameter çağrısı başarısız olursa, APD'de ayarlanacağı tanımlayıcı alanların içeriği tanımlanmamış olur ve APD'nin SQL_DESC_COUNT alanı değişmez. Ayrıca, IPD'deki uygun kaydın SQL_DESC_LENGTH, SQL_DESC_PRECISION, SQL_DESC_SCALE ve SQL_DESC_TYPE alanları tanımlanmamış ve IPD'nin SQL_DESC_COUNT alanı değişmemiştir.

SQLSetParam'a ve Çağrılardan Dönüşüm

Bir ODBC 1.0 uygulaması SQLSetParam'ı bir ODBC 3'te çağırdığında. x sürücü, ODBC 3. x Sürücü Yöneticisi, çağrıyı aşağıdaki tabloda gösterildiği gibi eşler.

ODBC 1.0 uygulaması tarafından çağrı ODBC 3'e ara. x sürücüsü
SQLSetParam( StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValuePtr, StrLen_or_IndPtr); SQLBindParameter( StatementHandle, ParameterNumber, SQL_PARAM_INPUT_OUTPUT, ValueType, ParameterType, ColumnSize, DecimalDigits, ParameterValuePtr, SQL_SETPARAM_VALUE_MAX, StrLen_or_IndPtr);

Examples

A. SQLBindParameter Fonksiyonunu Kullanın

Aşağıdaki örnekte, bir uygulama ORDERS tablosuna veri eklemek için bir SQL ifadesi hazırlar. Uygulama, ifadedeki her parametre için SQLBindParameter çağırarak ODBC C veri tipini ve parametrenin SQL veri tipini belirtir ve her parametreye bir tampon bağlamak ister. Her veri satırı için uygulama, her parametreye veri değerleri atar ve ifadeyi çalıştırmak için SQLExecute'u çağırır.

Aşağıdaki örnek, bilgisayarınızda Northwind veritabanıyla ilişkili bir ODBC veri kaynağınız olduğunu varsaymaktadır.

Daha fazla kod örneği için SQLBulkOperations Function, SQLProcedures Function, SQLPutData Function ve SQLSetPos Function sayfalarına bakınız.

// SQLBindParameter_Function.cpp  
// compile with: ODBC32.lib  
#include <windows.h>  
#include <sqltypes.h>  
#include <sqlext.h>  
  
#define EMPLOYEE_ID_LEN 10  
  
SQLHENV henv = NULL;  
SQLHDBC hdbc = NULL;  
SQLRETURN retcode;  
SQLHSTMT hstmt = NULL;  
SQLSMALLINT sCustID;  
  
SQLCHAR szEmployeeID[EMPLOYEE_ID_LEN];  
SQL_DATE_STRUCT dsOrderDate;  
SQLINTEGER cbCustID = 0, cbOrderDate = 0, cbEmployeeID = SQL_NTS;  
  
int main() {  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);   
  
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
   retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
  
   retcode = SQLConnect(hdbc, (SQLCHAR*) "Northwind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
   retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
   retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, EMPLOYEE_ID_LEN, 0, szEmployeeID, 0, &cbEmployeeID);  
   retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &sCustID, 0, &cbCustID);  
   retcode = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TIMESTAMP, sizeof(dsOrderDate), 0, &dsOrderDate, 0, &cbOrderDate);  
  
   retcode = SQLPrepare(hstmt, (SQLCHAR*)"INSERT INTO Orders(CustomerID, EmployeeID, OrderDate) VALUES (?, ?, ?)", SQL_NTS);  
  
   strcpy_s((char*)szEmployeeID, _countof(szEmployeeID), "BERGS");  
   sCustID = 5;  
   dsOrderDate.year = 2006;  
   dsOrderDate.month = 3;  
   dsOrderDate.day = 17;  
  
   retcode = SQLExecute(hstmt);  
}  

B. Adlandırılmış bir parametre kullanarak saklanan bir prosedürü çalıştırın

Aşağıdaki örnekte, bir uygulama adlandırılmış bir parametre kullanarak SQL Server'da saklanan bir prosedürü çalıştırır.

// SQLBindParameter_Function_2.cpp  
// compile with: ODBC32.lib  
// sample assumes the following stored procedure:  
// use northwind  
// DROP PROCEDURE SQLBindParameter  
// GO  
//   
// CREATE PROCEDURE SQLBindParameter @quote int  
// AS  
// delete from orders where OrderID >= @quote  
// GO  
#include <windows.h>  
#include <sqltypes.h>  
#include <sqlext.h>  
  
SQLHDESC hIpd = NULL;  
SQLHENV henv = NULL;  
SQLHDBC hdbc = NULL;  
SQLRETURN retcode;  
SQLHSTMT hstmt = NULL;  
SQLCHAR szQuote[50] = "100084";  
SQLINTEGER cbValue = SQL_NTS;  
  
int main() {  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);   
  
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
   retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
  
   retcode = SQLConnect(hdbc, (SQLCHAR*) "Northwind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
   retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
   retcode = SQLPrepare(hstmt, (SQLCHAR*)"{call SQLBindParameter(?)}", SQL_NTS);  
   retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 50, 0, szQuote, 0, &cbValue);  
   retcode = SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hIpd, 0, 0);  
   retcode = SQLSetDescField(hIpd, 1, SQL_DESC_NAME, "@quote", SQL_NTS);  
  
   retcode = SQLExecute(hstmt);  
}  
Hakkında bilgi için Bkz:
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
Bu ifadede parametre tamponlarının serbest bırakılması SQLFreeStmt İşlevi
Ifade parametrelerinin sayısını döndürmek SQLNumParams Fonksiyonu
Veri göndermek için sonraki parametreyi döndürme SQLParamData İşlevi
Birden fazla parametre değerinin belirtilmesi SQLParamOptions Fonksiyonu
Yürütme zamanında parametre verileri gönderme SQLPutData İşlevi

Ayrıca Bkz.

ODBC API Referansı
ODBC Üst Bilgi Dosyaları
SQLGetData kullanarak çıktı parametrelerinin alınması