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.
Parametre dizilerini kullanmak için uygulama, parametre kümelerinin sayısını belirtmek üzere SQL_ATTR_PARAMSET_SIZE Öznitelik bağımsız değişkeniyle SQLSetStmtAttr'ı çağırır. Sürücünün, hata kümeleri de dahil olmak üzere işlenen parametre kümelerinin sayısını döndürebileceği bir değişkenin adresini belirtmek için SQL_ATTR_PARAMS_PROCESSED_PTR Öznitelik bağımsız değişkeniyle SQLSetStmtAttr'ı çağırır. SQLSetStmtAttr, SQL_ATTR_PARAM_STATUS_PTR öznitelik bağımsız değişkeni ile çağrılarak, parametre değerlerinin her satırı için durum bilgilerini döndürecek bir diziye işaret eder. Açıklama için sürücünün koruduğu yapıda bu adresler depolanır.
Uyarı
ODBC 2'de. x, bir parametre için birden çok değer belirtmek üzere SQLParamOptions çağrıldı. ODBC 3'te. x, SQLParamOptions çağrısı, SQL_ATTR_PARAMSET_SIZE ve SQL_ATTR_PARAMS_PROCESSED_ARRAY özniteliklerini ayarlamak için SQLSetStmtAttr çağrılarıyla değiştirildi.
deyimini yürütmeden önce, uygulama her ilişkili dizinin her öğesinin değerini ayarlar. deyimi yürütürken, sürücü parametre değerlerini almak ve veri kaynağına göndermek için depolandığı bilgileri kullanır; mümkünse, sürücü bu değerleri dizi olarak göndermelidir. Parametre dizilerinin kullanımı en iyi şekilde sql deyimini dizideki tüm parametrelerle veri kaynağına tek bir çağrıyla yürüterek uygulansa da, bu özellik günümüzde DBMS'lerde yaygın olarak kullanılamamaktadır. Ancak sürücüler, her biri tek bir parametre kümesine sahip bir SQL deyimini birden çok kez yürüterek bunun benzetimini yapabilir.
Bir uygulama parametre dizilerini kullanmadan önce, uygulama tarafından kullanılan sürücüler tarafından desteklendiğinden emin olmalıdır. Bunu yapmanın iki yolu vardır:
Yalnızca parametre dizilerini desteklemek için bilinen sürücüleri kullanın. Uygulama bu sürücülerin adlarını sabit olarak kodlayabilir veya kullanıcıya yalnızca bu sürücüleri kullanması bildirilebilir. Özel uygulamalar ve dikey uygulamalar genellikle sınırlı sayıda sürücü kullanır.
Çalışma zamanında parametre dizilerinin destek olup olmadığını denetleyin. Sürücü, SQL_ATTR_PARAMSET_SIZE deyimi özniteliğini 1'den büyük bir değere ayarlamak mümkünse parametre dizilerini destekler. Genel uygulamalar ve dikey uygulamalar genellikle çalışma zamanında parametre dizilerinin desteklenme durumunu denetler.
Parametreli yürütmede satır sayılarının ve sonuç kümelerinin kullanılabilirliği, SQL_PARAM_ARRAY_ROW_COUNTS ve SQL_PARAM_ARRAY_SELECTS seçenekleriyle SQLGetInfo çağrılarak belirlenebilir. INSERT, UPDATE ve DELETE deyimleri için SQL_PARAM_ARRAY_ROW_COUNTS seçeneği, tek tek satır sayılarının (her parametre kümesi için bir tane) kullanılabilir olup olmadığını (SQL_PARC_BATCH) veya satır sayılarının tek bir (SQL_PARC_NO_BATCH) olarak toplanıp toplandığını gösterir. SELECT deyimleri için SQL_PARAM_ARRAY_SELECTS seçeneği, her parametre kümesi (SQL_PAS_BATCH) için bir sonuç kümesinin kullanılabilir olup olmadığını veya yalnızca bir sonuç kümesinin (SQL_PAS_NO_BATCH) kullanılabilir olup olmadığını gösterir. Sürücü, sonuç kümesi oluşturma deyimlerinin bir parametre dizisiyle yürütülmesine izin vermiyorsa, SQL_PARAM_ARRAY_SELECTS SQL_PAS_NO_SELECT döndürür. Özellikle bu deyimlerdeki parametrelerin kullanımı veri kaynağına özgü olacağından ve ODBC SQL dil bilgisini izlemeyeceğinden, parametre dizilerinin diğer deyim türleriyle kullanılıp kullanılamayacağı veri kaynağına özgüdür.
SQL_ATTR_PARAM_OPERATION_PTR deyimi özelliği tarafından işaret edilen dizi, belirli parametre satırlarını yoksaymak için kullanılabilir. Dizinin bir öğesi SQL_PARAM_IGNORE olarak ayarlanırsa, bu öğeye karşılık gelen parametre kümesi SQLExecute veya SQLExecDirect çağrısının dışında tutulur. SQL_ATTR_PARAM_OPERATION_PTR özniteliği tarafından işaret edilen dizi, uygulama tarafından ayrılır, doldurulur ve ardından sürücü tarafından okunur. Getirilen satırlar giriş parametreleri olarak kullanılıyorsa, satır durumu dizisinin değerleri parametre işlemi dizisinde kullanılabilir.
Hata İşleme
Deyimi yürütülürken bir hata oluşursa, yürütme işlevi bir hata döndürür ve satır numarası değişkenini hatayı içeren satırın sayısına ayarlar. Hata kümesi dışındaki tüm satırların yürütülmesi veya hata kümesinden önceki (ancak sonra olmayan) tüm satırların yürütülmesi veri kaynağına özgüdür. Parametre kümelerini işlediğinden, sürücü SQL_ATTR_PARAMS_PROCESSED_PTR deyimi özniteliği tarafından belirtilen arabelleği o anda işlenen satırın sayısına ayarlar. Hata kümesi dışındaki tüm kümeler yürütülürse, sürücü tüm satırlar işlendikten sonra bu arabelleği SQL_ATTR_PARAMSET_SIZE olarak ayarlar.
SQL_ATTR_PARAM_STATUS_PTR deyimi özniteliği ayarlanmışsa, SQLExecute veya SQLExecDirect her parametre kümesinin durumunu sağlayan parametre durum dizisini döndürür. Parametre durum dizisi uygulama tarafından ayrılır ve sürücü tarafından doldurulur. Öğeleri, SQL deyiminin parametre satırı için başarıyla yürütülürken mi yoksa parametre kümesi işlenirken bir hata mı oluştuğunu gösterir. Hata oluşursa, sürücü parametre durum dizisindeki karşılık gelen değeri SQL_PARAM_ERROR olarak ayarlar ve SQL_SUCCESS_WITH_INFO döndürür. Uygulama, hangi satırların işlendiğini belirlemek için durum dizisini denetleyebilir. Uygulama, satır numarasını kullanarak hatayı düzeltebilir ve işlemeyi sürdürebilir.
Parametre durum dizisinin nasıl kullanıldığı , SQLGetInfo çağrısı tarafından döndürülen SQL_PARAM_ARRAY_ROW_COUNTS ve SQL_PARAM_ARRAY_SELECTS seçenekleri tarafından belirlenir. INSERT, UPDATE ve DELETE deyimleri için parametre durum dizisi, SQL_PARAM_ARRAY_ROW_COUNTS için SQL_PARC_BATCH döndürülürse durum bilgileriyle doldurulur, ancak SQL_PARC_NO_BATCH döndürülürse girilmez. SELECT ifadeleri için, SQL_PARAM_ARRAY_SELECT'e SQL_PAS_BATCH döndürüldüğünde parametre durum dizisi doldurulur, ancak SQL_PAS_NO_BATCH veya SQL_PAS_NO_SELECT döndürüldüğünde doldurulmaz.
Yürütme Sırasında Veri Parametreleri
Uzunluk/gösterge dizisindeki değerlerden herhangi biri SQL_DATA_AT_EXEC veya SQL_LEN_DATA_AT_EXEC(uzunluk) makrosunun sonucuysa, bu değerlerin verileri SQLPutData ile normal şekilde gönderilir. Bu sürecin aşağıdaki yönleri, açıkça belli olmadıklarından özel bir açıklama içerir:
Sürücü SQL_NEED_DATA döndürdüğünde, satır numarası değişkeninin adresini veriye ihtiyaç duyduğu satıra ayarlamalıdır. Tek değerli durumda olduğu gibi uygulama, sürücünün tek bir parametre kümesi içinde parametre değerleri isteme sırası hakkında herhangi bir varsayımda bulunamaz. Bir data-at-execution parametresinin yürütülmesinde hata oluşursa, SQL_ATTR_PARAMS_PROCESSED_PTR deyimi özniteliği tarafından belirtilen arabellek hatanın oluştuğu satırın sayısına ayarlanır, SQL_ATTR_PARAM_STATUS_PTR deyimi özniteliği tarafından belirtilen satır durum dizisindeki satırın durumu SQL_PARAM_ERROR olarak ayarlanır, ve SQLExecute, SQLExecDirect, SQLParamData veya SQLPutData çağrısı SQL_ERROR döndürür. SQLExecute, SQLExecDirect veya SQLParamData SQL_STILL_EXECUTING döndürürse, bu arabelleğin içeriği tanımlanmamıştır.
Sürücü, yürütme sırasında veri parametreleri için SQLBindParameter'ınParameterValuePtr bağımsız değişkenindeki değeri yorumlamadığından, uygulama bir diziye işaretçi sağlarsa, SQLParamData bu dizinin bir öğesini ayıklamaz ve uygulamaya döndürmez. Bunun yerine, uygulamanın sağladığı skaler değeri döndürür. Bu, SQLParamData tarafından döndürülen değerin uygulamanın veri göndermesi gereken parametreyi belirtmek için yeterli olmadığı anlamına gelir; uygulamanın geçerli satır numarasını da dikkate alması gerekir.
Bir parametre dizisinin yalnızca bazı öğeleri yürütme sırasında veri parametreleri olduğunda, uygulamanın tüm parametreler için öğeler içeren ParameterValuePtr'deki bir dizinin adresini geçirmesi gerekir. Bu dizi, yürütme sırasında veri parametresi olmayan parametreler için normal olarak yorumlanır. Yürütme sırasında veri parametreleri için SQLParamData'nın uygulamaya sağladığı ve normalde bu durumda sürücünün istediği verileri tanımlamak için kullanılabilen değer her zaman dizinin adresidir.