Aracılığıyla paylaş


Uzunluk ve Gösterge Değerlerini Kullanma

Uzunluk/gösterge arabelleği, veri arabelleğindeki verilerin bayt uzunluğunu veya verilerin NULL olduğunu belirten SQL_NULL_DATA gibi özel bir göstergeyi geçirmek için kullanılır. Kullanıldığı işleve bağlı olarak, uzunluk/gösterge arabelleği SQLINTEGER veya SQLSMALLINT olarak tanımlanır. Dolayısıyla, bunu tanımlamak için tek bir bağımsız değişken gerekir. Veri arabelleği ertelenmemiş bir giriş arabelleğiyse, bu bağımsız değişken verilerin bayt uzunluğunu veya bir gösterge değerini içerir. Genellikle StrLen_or_Ind veya benzer bir adla adlandırılır. Örneğin, aşağıdaki kod verilerle dolu bir arabellek geçirmek için SQLPutData'yı çağırır; veri arabelleği (ValuePtr) bir giriş arabelleği olduğundan bayt uzunluğu (ValueLen) doğrudan geçirilir.

SQLCHAR      ValuePtr[50];  
SQLINTEGER   ValueLen;  
  
// Call local function to place data in ValuePtr. In ValueLen, return the  
// number of bytes of data placed in ValuePtr. If there is not enough  
// data, this will be less than 50.  
FillBuffer(ValuePtr, sizeof(ValuePtr), &ValueLen);  
  
// Call SQLPutData to send the data to the driver.  
SQLPutData(hstmt, ValuePtr, ValueLen);  

Veri arabelleği ertelenmiş bir giriş arabelleği, ertelenmemiş bir çıkış arabelleği veya bir çıkış arabelleğiyse, bağımsız değişken uzunluk/gösterge arabelleğinin adresini içerir. Genellikle StrLen_or_IndPtr veya benzer bir adla adlandırılır. Örneğin, aşağıdaki kod verilerle dolu bir arabellek almak için SQLGetData'yı çağırır; bayt uzunluğu, ilgili veri arabelleği (ValuePtr) bir ertelenmemiş çıkış arabelleği olduğundan adresi SQLGetData'ya geçirilen uzunluk/gösterge arabelleğinde (ValueLenOrInd) uygulamaya döndürülür.

SQLCHAR      ValuePtr[50];  
SQLINTEGER   ValueLenOrInd;  
SQLGetData(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);  

Özel olarak yasaklanmadığı sürece, uzunluk/gösterge arabelleği bağımsız değişkeni 0 (ertelenmiş giriş değilse) veya null işaretçi (çıkış veya ertelenmiş girişse) olabilir. Giriş arabellekleri için bu, sürücünün verilerin bayt uzunluğunu yoksaymasına neden olur. Bu, değişken uzunluklu veriler geçirilirken bir hata döndürür, ancak null olmayan, sabit uzunlukta veriler geçirilirken sık karşılaşılan bir durumdur çünkü uzunluk veya gösterge değeri gerekli değildir. Çıkış arabellekleri için bu, sürücünün verilerin bayt uzunluğunu veya gösterge değerini döndürmemesine neden olur. Sürücü tarafından döndürülen veriler NULL ise bu, sabit uzunlukta, boş değer atanamayan veriler alınırken yaygın bir hatadır çünkü ne uzunluk ne de gösterge değeri gereklidir.

Ertelenen veri arabelleğinin adresi sürücüye geçirildiğinde olduğu gibi, ertelenen uzunluk/gösterge arabelleğinin adresi arabellek ilişkisiz olana kadar geçerli kalmalıdır.

Aşağıdaki uzunluklar uzunluk/gösterge değerleri olarak geçerlidir:

  • n, burada n> 0.

  • SQL_NTS. Karşılık gelen veri arabelleğindeki sürücüye gönderilen bir dize null olarak sonlandırılır; Bu, C programcıları için bayt uzunluklarını hesaplamak zorunda kalmadan dizeleri geçirmenin kullanışlı bir yoludur. Bu değer yalnızca uygulama sürücüye veri gönderdiğinde yasaldır. Sürücü uygulamaya veri döndürdüğünde, her zaman verilerin gerçek bayt uzunluğunu döndürür.

Aşağıdaki değerler uzunluk/gösterge değerleri olarak geçerlidir. SQL_NULL_DATA SQL_DESC_INDICATOR_PTR tanımlayıcı alanında depolanır; diğer tüm değerler SQL_DESC_OCTET_LENGTH_PTR tanımlayıcı alanında depolanır.

  • SQL_NULL_DATA. Veri bir NULL veri değeridir ve ilgili veri arabelleğindeki değer yoksayılır. Bu değer yalnızca sürücüye gönderilen veya sürücüden alınan SQL verileri için geçerlidir.

  • SQL_DATA_AT_EXEC. Veri arabelleği herhangi bir veri içermiyor. Bunun yerine, deyim yürütülürken veya SQLBulkOperations veya SQLSetPos çağrıldığında veriler SQLPutData ile gönderilir. Bu değer yalnızca sürücüye gönderilen SQL verileri için geçerlidir. Daha fazla bilgi için bkz . SQLBindParameter, SQLBulkOperations ve SQLSetPos.

  • SQL_LEN_DATA_AT_EXEC(uzunluk) makrosunun sonucu. Bu değer SQL_DATA_AT_EXEC ile benzerdir. Daha fazla bilgi için bkz. Uzun Veri Gönderme.

  • SQL_NO_TOTAL. Sürücü, çıkış arabelleğinde döndürülmeye devam eden uzun veri bayt sayısını belirleyemiyor. Bu değer yalnızca sürücüden alınan SQL verileri için geçerlidir.

  • SQL_DEFAULT_PARAM. Yordam, ilgili veri arabelleğindeki değer yerine bir yordamda giriş parametresinin varsayılan değerini kullanmaktır.

  • SQL_COLUMN_IGNORE. SQLBulkOperations veya SQLSetPos, veri arabelleğindeki değeri yoksayar. SQLBulkOperations veya SQLSetPos çağrısıyla bir veri satırını güncelleştirirken, sütun değeri değiştirilmez. SQLBulkOperations çağrısıyla yeni bir veri satırı eklerken, sütun değeri varsayılan değerine veya sütunun varsayılan değeri yoksa NULL olarak ayarlanır.