Aracılığıyla paylaş


Uzun Veri Gönderme

DBMS'ler , uzun verileri 254 karakter gibi belirli bir boyuttaki herhangi bir karakter veya ikili veri olarak tanımlar. Öğenin uzun bir metin belgesini veya bit eşlemi temsil ettiği durumlar gibi uzun verilerden oluşan bir öğenin tamamını bellekte depolamak mümkün olmayabilir. Bu tür veriler tek bir arabellekte depolanamadığından, veri kaynağı deyimi yürütülürken SQLPutData ile bölümler halinde sürücüye gönderir. Yürütme zamanında veri gönderilen parametreler, yürütme sırasında veri parametreleri olarak bilinir.

Uyarı

Bir uygulama, SQLPutData ile yürütme zamanında herhangi bir veri türünü gönderebilir, ancak yalnızca karakter ve ikili veriler parçalar halinde gönderilebilir. Ancak, veriler tek bir arabelleğe sığacak kadar küçükse, genellikle SQLPutData kullanmak için bir neden yoktur. Arabelleği bağlamak ve sürücünün arabellekten verileri almasına izin vermek çok daha kolaydır.

Yürütme zamanında veri göndermek için uygulama aşağıdaki eylemleri gerçekleştirir:

  1. ParameterValuePtr argümanında SQLBindParameter içindeki parametreyi tanımlayan 32 bitlik bir değer geçirir; bir arabelleğin adresini geçirmek yerine. Bu değer sürücü tarafından çözümlenmez. Daha sonra uygulamaya döndürülür, bu nedenle uygulama için bir anlam ifade eder. Örneğin, parametrenin numarası veya veri içeren bir dosyanın tanıtıcısı olabilir.

  2. SQLBindParameter'ınStrLen_or_IndPtr bağımsız değişkenindeki uzunluk/gösterge arabelleğinin adresini geçirir.

  3. SQL_DATA_AT_EXEC veya SQL_LEN_DATA_AT_EXEC(uzunluk) makrosunun sonucunu uzunluk/gösterge arabelleğinde depolar. Bu değerlerin her ikisi de sürücüye parametre verilerinin SQLPutData ile gönderileceğini gösterir. SQL_LEN_DATA_AT_EXEC(uzunluk), alanın önceden yerleşebilmesi için kaç bayt uzun veri gönderileceğini bilmesi gereken bir veri kaynağına uzun veri gönderirken kullanılır. Bir veri kaynağının bu değeri gerektip gerektirmediğini belirlemek için uygulama, SQL_NEED_LONG_DATA_LEN seçeneğiyle SQLGetInfo'yı çağırır. Tüm sürücülerin bu makroya destek vermesi gerekir; veri kaynağı bayt uzunluğunu gerektirmiyorsa, sürücü bunu yoksayabilir.

  4. SQLExecute veya SQLExecDirect'i çağırır. Sürücü, uzunluk/gösterge arabelleğinin SQL_DATA_AT_EXEC değerini veya SQL_LEN_DATA_AT_EXEC(uzunluk) makrosunun sonucunu içerdiğini bulur ve işlevin dönüş değeri olarak SQL_NEED_DATA döndürür.

  5. SQL_NEED_DATA dönüş değerine yanıt olarak SQLParamData'yi çağırır. Uzun verilerin gönderilmesi gerekiyorsa , SQLParamData SQL_NEED_DATA döndürür. ValuePtrPtr bağımsız değişkeninin işaret ettiği arabellekte, sürücü yürütme anındaki veri parametresini tanımlayan değeri döndürür. Birden fazla yürütme sırasında veri parametresi varsa, uygulamanın hangi parametre için veri göndereceğini belirlemek için bu değeri kullanması gerekir; sürücü, belirli bir sırada yürütme sırasında veri parametreleri için veri istemek için gerekli değildir.

  6. Parametre verilerini sürücüye göndermek için SQLPutData'yi çağırır. Parametre verileri genellikle uzun verilerde olduğu gibi tek bir arabelleğe sığmazsa, uygulama verileri parçalar halinde göndermek için SQLPutData'yı tekrar tekrar çağırır; verileri yeniden bir araya getirmek sürücüye ve veri kaynağına bağlı. Uygulama null olarak sonlandırılan dize verilerini geçirirse, sürücü veya veri kaynağı yeniden birleştirme işleminin bir parçası olarak null sonlandırma karakterini kaldırmalıdır.

  7. Parametresi için tüm verileri gönderdiğini belirtmek için SQLParamData'yi yeniden çağırır. Verilerin gönderilmediği herhangi bir yürütme sırasında veri parametresi varsa, sürücü SQL_NEED_DATA ve sonraki parametreyi tanımlayan değeri döndürür; uygulama 6. adıma döner. Tüm yürütme anındaki veri parametreleri için veri gönderildiyse, ifade yürütülür. SQLParamData SQL_SUCCESS veya SQL_SUCCESS_WITH_INFO döndürür ve SQLExecute veya SQLExecDirect'in döndürebileceği herhangi bir dönüş değeri veya tanılama döndürebilir.

SQLExecute veya SQLExecDirect SQL_NEED_DATA döndürdüğünde ve en son yürütme sırasındaki veri parametresi için veriler tamamen gönderilmeden önce ifade Veri Bekleniyor durumundadır. Bir deyim Veri Gerekiyor durumunda olduğunda, uygulama yalnızca SQLPutData;, SQLParamData, SQLCancel, SQLGetDiagField veya SQLGetDiagRec işlevlerini çağırabilir; diğer tüm işlevler SQLSTATE HY010 (İşlev dizisi hatası) döndürür. SQLCancel çağrısı deyiminin yürütülmesini iptal eder ve önceki durumuna döndürür. Daha fazla bilgi için bkz . Ek B: ODBC Durumu Geçiş Tabloları.

Yürütme zamanında veri gönderme örneği için bkz. SQLPutData işlev açıklaması.