Aracılığıyla paylaş


SQLColAttribute İşlevi

uyumluluk
Sunulan Sürüm: ODBC 3.0 Standartları Uyumluluğu: ISO 92

Özeti
SQLColAttribute, sonuç kümesindeki bir sütunun tanımlayıcı bilgilerini döndürür. Tanımlayıcı bilgileri karakter dizesi, tanımlayıcıya bağımlı değer veya tamsayı değeri olarak döndürülür.

Not

Bir ODBC 3 olduğunda Driver Manager'ın bu işlevi neyle eşlediğinde hakkında daha fazla bilgi için.x uygulaması odbc 2 ile çalışıyor. x sürücüsü, bkz. Uygulamaların Geriye Dönük Uyumluluğu için Eşleme Değiştirme İşlevleri.

Sözdizimi

  
SQLRETURN SQLColAttribute (  
      SQLHSTMT        StatementHandle,  
      SQLUSMALLINT    ColumnNumber,  
      SQLUSMALLINT    FieldIdentifier,  
      SQLPOINTER      CharacterAttributePtr,  
      SQLSMALLINT     BufferLength,  
      SQLSMALLINT *   StringLengthPtr,  
      SQLLEN *        NumericAttributePtr);  

Bağımsız değişken

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

ColumnNumber
[Giriş] Alan değerinin alınacağı IRD'deki kaydın sayısı. Bu bağımsız değişken, 1'den başlayarak artan sütun sırasına göre sıralanmış sonuç verilerinin sütun sayısına karşılık gelir. Sütunlar herhangi bir sırada açıklanabilir.

Sütun 0 bu bağımsız değişkende belirtilebilir, ancak SQL_DESC_TYPE ve SQL_DESC_OCTET_LENGTH dışındaki tüm değerler tanımsız değerler döndürür.

FieldIdentifier
[Giriş] Tanımlayıcı tutamacı. Bu tanıtıcı, IRD'deki hangi alanın sorgulanması gerektiğini tanımlar (örneğin, SQL_COLUMN_TABLE_NAME).

CharacterAttributePtr
[Çıkış] Alan bir karakter dizesiyse, IRD'nin ColumnNumber satırının FieldIdentifier alanındaki değerin döndürüleceği arabelleğe işaretçi. Aksi takdirde, alan kullanılmaz.

CharacterAttributePtr NULL ise, StringLengthPtr, CharacterAttributePtrtarafından işaret edilen arabellekte döndürülecek toplam bayt sayısını (karakter verileri için null sonlandırma karakteri hariç) döndürmeye devam eder.

BufferLength
[Giriş] FieldIdentifier ODBC tanımlı bir alansa ve CharacterAttributePtr bir karakter dizesine veya ikili arabelleğe işaret ederse, bu bağımsız değişken *CharacterAttributePtruzunluğu olmalıdır. FieldIdentifier ODBC tanımlı bir alansa ve *CharacterAttributePtr bir tamsayıysa, bu alan yoksayılır. *CharacterAttributePtr bir Unicode dizesiyse (SQLColAttributeWçağrılırken), BufferLength bağımsız değişkeni çift sayı olmalıdır. FieldIdentifier sürücü tanımlı bir alansa, uygulama BufferLength bağımsız değişkenini ayarlayarak alanın niteliğini Driver Manager'a gösterir. BufferLength aşağıdaki değerlere sahip olabilir:

  • CharacterAttributePtr bir işaretçiyse BufferLength değeri SQL_IS_POINTER olmalıdır.

  • CharacterAttributePtr bir karakter dizesinin işaretçisiyse bufferLength arabellek uzunluğudur.

  • CharacterAttributePtr ikili arabelleğe yönelik bir işaretçiyse, uygulama SQL_LEN_BINARY_ATTR(uzunluk) makrosunun sonucunu BufferLengthiçine yerleştirir. Bu, BufferLengthnegatif bir değer yerleştirir.

  • CharacterAttributePtr sabit uzunlukta bir veri türüne yönelik bir işaretçiyse BufferLength şunlardan biri olmalıdır: SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT veya SQL_IS_USMALLINT.

StringLengthPtr
[Çıkış] *CharacterAttributePtriçinde döndürülebilen toplam bayt sayısını (karakter verileri için null sonlandırma baytını hariç) döndürecek arabelleğe yönelik işaretçi.

Karakter verileri için, döndürülecek bayt sayısı BufferLengthdeğerinden büyük veya buna eşitse, *CharacterAttributePtr içindeki tanımlayıcı bilgileri, null sonlandırma karakterinin uzunluğu eksi BufferLength olarak kesilir ve sürücü tarafından null sonlandırılır.

Diğer tüm veri türleri için BufferLength değeri yoksayılır ve sürücü*CharacterAttributePtr boyutunun 32 bit olduğunu varsayar.

NumericAttributePtr
[Çıkış] Alan, SQL_DESC_COLUMN_LENGTH gibi sayısal bir tanımlayıcı türüyse, IRD'nin ColumnNumber satırının FieldIdentifier alanındaki değerin döndürüleceği bir tamsayı arabelleği işaretçisi. Aksi takdirde, alan kullanılmaz. Bazı sürücülerin yalnızca alt 32 bit veya 16 bit arabellek yazabileceğini ve daha yüksek sıralı biti değiştirmeden bırakabileceğini unutmayın. Bu nedenle, uygulamalar bu işlevi çağırmadan önce 0 değerini başlatmalıdır.

Döndürür

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR veya SQL_INVALID_HANDLE.

Tanılama

SQLColAttribute SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, SQL_HANDLE_STMT HandleType ve StatementHandleHandle ile SQLGetDiagRec çağrılarak ilişkili bir SQLSTATE değeri alınabilir. Aşağıdaki tabloda, SQLColAttribute tarafından yaygın olarak döndürülen SQLSTATE değerleri listelenir ve her biri bu işlev bağlamında açıklanmaktadır; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATEs açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.

SQLSTATE Hata Açıklama
01000 Genel uyarı Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01004 Dize verileri, sağ kesilmiş *CharacterAttributePtr tüm dize değerini döndürecek kadar büyük olmadığından dize değeri kesildi. Doğrulanmamış dize değerinin uzunluğu *StringLengthPtriçinde döndürülür. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
07005 Hazırlanmış deyim imleç belirtimi StatementHandle ile ilişkilendirilmiş deyim bir sonuç kümesi döndürmedi ve FieldIdentifier SQL_DESC_COUNT değildi. Anlatacak sütun yoktu.
07009 Geçersiz tanımlayıcı dizini (DM) ColumnNumber için belirtilen değer 0'a eşitti ve SQL_ATTR_USE_BOOKMARKS deyimi özniteliği SQL_UB_OFF.

ColumnNumber bağımsız değişkeni için belirtilen değer, sonuç kümesindeki sütun sayısından fazlaydı.
HY000 Genel hata Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. Tanılama veri yapısından SQLGetDiagField 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 StatementHandleiçin zaman uyumsuz işleme etkinleştirildi. İşlev çağrıldı ve yürütmeyi tamamlamadan önce sqlcancel veya SQLCancelHandle StatementHandleüzerinde çağrıldı. Ardından işlev StatementHandleüzerinde yeniden çağrıldı.

İşlev çağrıldı ve yürütmeyi tamamlamadan önce SQLCancel
veya SQLCancelHandle , çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından StatementHandle çağrıldı.
HY010 İşlev dizisi hatası (DM) StatementHandleile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. SQLColAttribute çağrıldığında bu zaman uyumsuz işlev hala yürütülüyordu.

(DM) SQLExecute, SQLExecDirectveya 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) İşlev, SQLPrepare, SQLExecDirectveya StatementHandleiçin bir katalog işlevi çağrılmadan önce çağrıldı.

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

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationsveya 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.
HY090 Geçersiz dize veya arabellek uzunluğu (DM) *CharacterAttributePtr bir karakter dizesidir ve BufferLength 0'dan küçüktür ancak SQL_NTS eşit değildir.
HY091 Geçersiz tanımlayıcı alan tanımlayıcısı FieldIdentifier bağımsız değişkeni için belirtilen değer tanımlı değerlerden biri değildi ve uygulama tanımlı bir değer değildi.
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 alma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi.
HYC00 Sürücü uygun değil FieldIdentifier bağımsız değişkeni için belirtilen değer sürücü tarafından desteklenmiyordu.
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 SQLSetConnectAttrSQL_ATTR_CONNECTION_TIMEOUT üzerinden ayarlanır.
IM001 Sürücü bu işlevi desteklemiyor (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor.
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 etkinse, SQLCompleteAsync işlem sonrası işlem yapmak ve işlemi tamamlamak için tanıtıcıda çağrılmalıdır.

SQLPrepare sonra ve SQLExecuteönce çağrıldığında, SQLColAttribute SQLPrepare veya SQLExecutetarafından döndürülebilecek sqlstate Deyimihandleile ilişkili SQL deyimini ne zaman değerlendirdiğine bağlı olarak döndürebilir.

Performans nedenleriyle, bir uygulama bir deyimi yürütmeden önce SQLColAttribute çağırmamalıdır.

Yorum

Uygulamaların SQLColAttributetarafından döndürülen bilgileri nasıl kullandığı hakkında bilgi için bkz. Sonuç Kümesi Meta Verileri.

SQLColAttribute, *NumericAttributePtr veya *CharacterAttributePtriçinde bilgi döndürür. *NumericAttributePtr bir SQLLEN değeri olarak tamsayı bilgileri döndürülür; diğer tüm bilgi biçimleri *CharacterAttributePtriçinde döndürülür. *NumericAttributePtriçinde bilgi döndürülürse, sürücü CharacterAttributePtr, BufferLengthve StringLengthPtr'ı yoksayar. *CharacterAttributePtriçinde bilgiler döndürülürse, sürücü NumericAttributePtryoksayar.

SQLColAttribute, IRD'nin tanımlayıcı alanlarındaki değerleri döndürür. İşlev, tanımlayıcı tanıtıcı tutamacı yerine bir deyim tutamacı ile çağrılır. Bu bölümün devamında listelenen FieldIdentifier değerleri için SQLColAttribute tarafından döndürülen değerler, uygun IRD tanıtıcısıyla SQLGetDescField çağrılarak da alınabilir.

Şu anda tanımlanmış tanımlayıcı alanları, tanıtıldıkları ODBC sürümü ve bunlar için bilgilerin döndürüldiği bağımsız değişkenler bu bölümün devamında gösterilir; farklı veri kaynaklarından yararlanmak için sürücüler tarafından daha fazla tanımlayıcı türü tanımlanabilir.

ODBC 3.x sürücüsü, tanımlayıcı alanların her biri için bir değer döndürmelidir. Tanımlayıcı alanı bir sürücüye veya veri kaynağına uygulanmıyorsa ve aksi belirtilmediği sürece, sürücü *StringLengthPtr içinde 0 veya *CharacterAttributePtriçinde boş bir dize döndürür.

Geriye Dönük Uyumluluk

ODBC 3. SQLColAttribute x işlevi, kullanım dışı bırakılan ODBC 2'nin yerini alır. SQLColAttributesx işlevi. SQLColAttributes SQLColAttribute (ODBC 2.x uygulaması ODBC 3 ile çalışırken) eşler.x sürücüsü) veya SQLColAttribute SQLColAttribute eşleme (ODBC 3.x uygulaması odbc 2.x sürücüsüyle çalıştığında), Driver Manager FieldIdentifier değerini geçirir, yeni bir değerle eşler veya aşağıdaki gibi bir hata döndürür:

Not

FieldIdentifier'da kullanılan ön ek, ODBC 3'teki değerleri.x ODBC 2'de kullanılandan değiştirildi. x. Yeni ön ek "SQL_DESC"; eski ön ek "SQL_COLUMN" idi.

  • ODBC 2'nin #define değeriyse.xFieldIdentifier ODBC 3'ün #define değeriyle aynıdır.xFieldIdentifierişlev çağrısındaki değer geçirilir.

  • ODBC 2'nin #define değerleri.xFieldIdentifiers SQL_COLUMN_LENGTH, SQL_COLUMN_PRECISION ve SQL_COLUMN_SCALE ODBC 3'ün #define değerlerinden farklıdır.xFieldIdentifiers SQL_DESC_PRECISION, SQL_DESC_SCALE ve SQL_DESC_LENGTH. ODBC 2.x sürücüsünün yalnızca ODBC 2'yi desteklemesi gerekir. x değerlerini. ODBC 3.x sürücüsü, bu üç FieldIdentifiersiçin hem "SQL_COLUMN" hem de "SQL_DESC" değerlerini desteklemelidir. Odbc 3'te duyarlık, ölçek ve uzunluk farklı tanımlandığından bu değerler farklıdır. odbc 2'de olduğundan dahax.x. Daha fazla bilgi için bkz. Sütun Boyutu, Ondalık Basamaklar, Sekizli Uzunluğu Aktar ve Görüntüleme Boyutu.

  • ODBC 2'nin #define değeriyse.xFieldIdentifier ODBC 3'ün #define değerinden farklıdır.xFieldIdentifier, COUNT, NAME ve NULLABLE değerlerinde olduğu gibi işlev çağrısındaki değer karşılık gelen değere eşlenir. Örneğin, SQL_COLUMN_COUNT SQL_DESC_COUNT ve SQL_DESC_COUNT eşlemenin yönüne bağlı olarak SQL_COLUMN_COUNT eşlenir.

  • FieldIdentifier ODBC 3'teki yeni bir değerse. ODBC 2'de karşılık gelen değer bulunmayan x.x, ODBC 3 olduğunda eşlenmez.x uygulaması bunu ODBC 2'de SQLColAttribute çağrısında kullanır. x sürücüsünüve çağrı SQLSTATE HY091 (Geçersiz tanımlayıcı alan tanımlayıcısı) döndürür.

Aşağıdaki tabloda, SQLColAttributetarafından döndürülen tanımlayıcı türleri listelenmiştir. NumericAttributePtr değerlerinin türü SQLLEN *.

FieldIdentifier Bilgi

içinde döndürüldü
Açıklama
SQL_DESC_AUTO_UNIQUE_VALUE (ODBC 1.0) NumericAttributePtr Sütunun otomatik olarak tıklayan bir sütun olup olmadığını SQL_TRUE.

SQL_FALSE sütun bir otomatik hesaplama sütunu değilse veya sayısal değilse.

Bu alan yalnızca sayısal veri türü sütunları için geçerlidir. Bir uygulama otomatik harita sütunu içeren bir satıra değer ekleyebilir, ancak genellikle sütundaki değerleri güncelleştiremez.

Bir ekleme otomatik harita sütununa yapıldığında, ekleme zamanında sütuna benzersiz bir değer eklenir. Artış tanımlı değildir, ancak veri kaynağına özgüdür. Bir uygulama, otomatik harita sütunlarının belirli bir noktada başladığını veya belirli bir değere göre arttığını varsaymamalıdır.
SQL_DESC_BASE_COLUMN_NAME (ODBC 3.0) CharacterAttributePtr Sonuç kümesi sütununun temel sütun adı. Temel sütun adı yoksa (ifade olan sütunlar gibi), bu değişken boş bir dize içerir.

Bu bilgiler, salt okunur bir alan olan IRD'nin SQL_DESC_BASE_COLUMN_NAME kayıt alanından döndürülür.
SQL_DESC_BASE_TABLE_NAME (ODBC 3.0) CharacterAttributePtr Sütunu içeren temel tablonun adı. Temel tablo adı tanımlanamazsa veya uygulanamazsa, bu değişken boş bir dize içerir.

Bu bilgiler, salt okunur bir alan olan IRD'nin SQL_DESC_BASE_TABLE_NAME kayıt alanından döndürülür.
SQL_DESC_CASE_SENSITIVE (ODBC 1.0) NumericAttributePtr Sütunun harmanlamalar ve karşılaştırmalar için büyük/küçük harfe duyarlı olarak ele alınıp alınmadığını SQL_TRUE.

SQL_FALSE sütun harmanlamalar ve karşılaştırmalar için büyük/küçük harfe duyarlı olarak değerlendirilmez veya uygun değildir.
SQL_DESC_CATALOG_NAME (ODBC 2.0) CharacterAttributePtr Sütunu içeren tablonun kataloğu. Döndürülen değer, sütun bir ifadeyse veya sütun bir görünümün parçasıysa uygulama tanımlıdır. Veri kaynağı katalogları desteklemiyorsa veya katalog adı belirlenemiyorsa boş bir dize döndürülür. Bu VARCHAR kayıt alanı 128 karakterle sınırlı değildir.
SQL_DESC_CONCISE_TYPE (ODBC 1.0) NumericAttributePtr Kısa veri türü.

Tarih saat ve aralık veri türleri için bu alan kısa veri türünü döndürür; örneğin, SQL_TYPE_TIME veya SQL_INTERVAL_YEAR. (Daha fazla bilgi için bkz. Ek D: Veri Türleri'nde veri türü tanımlayıcıları ve tanımlayıcıları .)

Bu bilgiler IRD'nin SQL_DESC_CONCISE_TYPE kayıt alanından döndürülür.
SQL_DESC_COUNT (ODBC 1.0) NumericAttributePtr Sonuç kümesinde kullanılabilen sütun sayısı. Sonuç kümesinde sütun yoksa bu değer 0 döndürür. ColumnNumber bağımsız değişkenindeki değer yoksayılır.

Bu bilgiler IRD'nin SQL_DESC_COUNT üst bilgi alanından döndürülür.
SQL_DESC_DISPLAY_SIZE (ODBC 1.0) NumericAttributePtr Sütundaki verileri görüntülemek için gereken karakter sayısı üst sınırı. Görüntüleme boyutu hakkında daha fazla bilgi için ek D: Veri Türleri'nde Sütun Boyutu, Ondalık Basamaklar, Sekizli Uzunluğu Aktar ve Görüntü Boyutu bölümüne bakın.
SQL_DESC_FIXED_PREC_SCALE (ODBC 1.0) NumericAttributePtr Sütunun veri kaynağına özgü sabit bir duyarlığı ve sıfır olmayan ölçeği olup olmadığını SQL_TRUE.

Sütunun veri kaynağına özgü sabit bir duyarlığı ve sıfır olmayan ölçeği olup olmadığını SQL_FALSE.
SQL_DESC_LABEL (ODBC 2.0) CharacterAttributePtr Sütun etiketi veya başlığı. Örneğin, EmpName adlı bir sütun Çalışan Adı veya diğer adla etiketlenmiş olabilir.

Bir sütunun etiketi yoksa, sütun adı döndürülür. Sütun etiketsiz ve adlandırılmamışsa boş bir dize döndürülür.
SQL_DESC_LENGTH (ODBC 3.0) NumericAttributePtr Bir karakter dizesinin veya ikili veri türünün maksimum veya gerçek karakter uzunluğu olan sayısal değer. Sabit uzunlukta bir veri türü için maksimum karakter uzunluğu veya değişken uzunluklu bir veri türü için gerçek karakter uzunluğudur. Değeri her zaman karakter dizesini sona erdiren null sonlandırma baytını dışlar.

Bu bilgiler IRD'nin SQL_DESC_LENGTH kayıt alanından döndürülür.

Uzunluk hakkında daha fazla bilgi için ek D: Veri Türleri'nde Sütun Boyutu, Ondalık Basamaklar, Sekizli Uzunluğu Aktar ve Görüntüleme Boyutu bölümüne bakın.
SQL_DESC_LITERAL_PREFIX (ODBC 3.0) CharacterAttributePtr Bu VARCHAR(128) kayıt alanı, sürücünün bu veri türünün değişmez değeri için ön ek olarak tanıdığı karakteri veya karakterleri içerir. Bu alan, değişmez değer ön ekinin geçerli olmadığı bir veri türü için boş bir dize içerir. Daha fazla bilgi için bkz. Değişmez Ön Ekleri ve Sonekleri.
SQL_DESC_LITERAL_SUFFIX (ODBC 3.0) CharacterAttributePtr Bu VARCHAR(128) kayıt alanı, sürücünün bu veri türünün değişmez değeri için sonek olarak tanıdığı karakteri veya karakterleri içerir. Bu alan, değişmez değer soneki geçerli olmayan bir veri türü için boş bir dize içerir. Daha fazla bilgi için bkz. Değişmez Ön Ekleri ve Sonekleri.
SQL_DESC_LOCAL_TYPE_NAME (ODBC 3.0) CharacterAttributePtr Bu VARCHAR(128) kayıt alanı, veri türünün normal adından farklı olabilecek herhangi bir yerelleştirilmiş (yerel dil) adı içerir. Yerelleştirilmiş ad yoksa boş bir dize döndürülür. Bu alan yalnızca görüntüleme amaçlıdır. Dizenin karakter kümesi yerel ayara bağımlıdır ve genellikle sunucunun varsayılan karakter kümesidir.
SQL_DESC_NAME (ODBC 3.0) CharacterAttributePtr Geçerliyse sütun diğer adı. Sütun diğer adı geçerli değilse, sütun adı döndürülür. Her iki durumda da SQL_DESC_UNNAMED SQL_NAMED olarak ayarlanır. Sütun adı veya sütun diğer adı yoksa boş bir dize döndürülür ve SQL_DESC_UNNAMED SQL_UNNAMED olarak ayarlanır.

Bu bilgiler IRD'nin SQL_DESC_NAME kayıt alanından döndürülür.
SQL_DESC_NULLABLE (ODBC 3.0) NumericAttributePtr Sütunun NULL değerleri varsa NULL ATANABILIR SQL_; Sütunun NULL değerleri yoksa SQL_NO_NULLS; veya sütunun NULL değerleri kabul edip etmediği bilinmiyorsa SQL_NULLABLE_UNKNOWN.

Bu bilgiler IRD'nin SQL_DESC_NULLABLE kayıt alanından döndürülür.
SQL_DESC_NUM_PREC_RADIX (ODBC 3.0) NumericAttributePtr SQL_DESC_TYPE alanındaki veri türü yaklaşık bir sayısal veri türüyse, SQL_DESC_PRECISION alanı bit sayısını içerdiğinden bu SQLINTEGER alanı 2 değerini içerir. SQL_DESC_TYPE alanındaki veri türü tam bir sayısal veri türüyse, SQL_DESC_PRECISION alanı ondalık basamak sayısını içerdiğinden bu alan 10 değerini içerir. Bu alan, sayısal olmayan tüm veri türleri için 0 olarak ayarlanır.
SQL_DESC_OCTET_LENGTH (ODBC 3.0) NumericAttributePtr Karakter dizesinin veya ikili veri türünün bayt cinsinden uzunluğu. Sabit uzunluklu karakter veya ikili türler için bu, bayt cinsinden gerçek uzunlukdur. Değişken uzunluklu karakter veya ikili türler için bayt cinsinden uzunluk üst sınırı budur. Bu değer null sonlandırıcıyı içermez.

Bu bilgiler IRD'nin SQL_DESC_OCTET_LENGTH kayıt alanından döndürülür.

Uzunluk hakkında daha fazla bilgi için ek D: Veri Türleri'nde Sütun Boyutu, Ondalık Basamaklar, Sekizli Uzunluğu Aktar ve Görüntüleme Boyutu bölümüne bakın.
SQL_DESC_PRECISION (ODBC 3.0) NumericAttributePtr Sayısal veri türü için geçerli duyarlığı belirten sayısal bir değer. Veri türleri SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP ve zaman aralığını temsil eden tüm aralık veri türleri için değeri kesirli saniye bileşeninin geçerli duyarlığıdır.

Bu bilgiler IRD'nin SQL_DESC_PRECISION kayıt alanından döndürülür.
SQL_DESC_SCALE (ODBC 3.0) NumericAttributePtr Sayısal veri türü için geçerli ölçek olan sayısal değer. ONDALıK ve SAYISAL veri türleri için bu tanımlı ölçektir. Diğer tüm veri türleri için tanımlanmamıştır.

Bu bilgiler IRD'nin SCALE kaydı alanından döndürülür.
SQL_DESC_SCHEMA_NAME (ODBC 2.0) CharacterAttributePtr Sütunu içeren tablonun şeması. Döndürülen değer, sütun bir ifadeyse veya sütun bir görünümün parçasıysa uygulama tanımlıdır. Veri kaynağı şemaları desteklemiyorsa veya şema adı belirlenemiyorsa boş bir dize döndürülür. Bu VARCHAR kayıt alanı 128 karakterle sınırlı değildir.
SQL_DESC_SEARCHABLE (ODBC 1.0) NumericAttributePtr Sütunun WHERE yan tümcesinde kullanılamayacağı SQL_PRED_NONE. (Bu, ODBC 2'deki SQL_UNSEARCHABLE değeriyle aynıdır.x.)

Sütunun WHERE yan tümcesinde kullanılıp kullanılamayabileceğini ancak yalnızca LIKE koşuluyla kullanılıp kullanılamayabileceğini SQL_PRED_CHAR. (Bu, ODBC 2'deki SQL_LIKE_ONLY değeriyle aynıdır.x.)

Sütunun LIKE dışındaki tüm karşılaştırma işleçleriyle where yan tümcesinde kullanılıp kullanılamayabileceğini SQL_PRED_BASIC. (Bu, ODBC 2'deki SQL_EXCEPT_LIKE değeriyle aynıdır.x.)

Sütunun herhangi bir karşılaştırma işleciyle WHERE yan tümcesinde kullanılıp kullanılamayabileceğini SQL_PRED_SEARCHABLE.

SQL_LONGVARCHAR ve SQL_LONGVARBINARY türünde sütunlar genellikle SQL_PRED_CHAR döndürür.
SQL_DESC_TABLE_NAME (ODBC 2.0) CharacterAttributePtr Sütunu içeren tablonun adı. Döndürülen değer, sütun bir ifadeyse veya sütun bir görünümün parçasıysa uygulama tanımlıdır.

Tablo adı belirlenemezse boş bir dize döndürülür.
SQL_DESC_TYPE (ODBC 3.0) NumericAttributePtr SQL veri türünü belirten sayısal bir değer.

ColumnNumber 0'a eşit olduğunda, değişken uzunlukta yer işaretleri için SQL_BINARY döndürülür ve sabit uzunlukta yer işaretleri için SQL_INTEGER döndürülür.

Tarih saat ve aralık veri türleri için, bu alan ayrıntılı veri türünü döndürür: SQL_DATETIME veya SQL_INTERVAL. (Daha fazla bilgi için bkz. Ek D: Veri Türleri'nde veri türü tanımlayıcıları ve tanımlayıcıları .

Bu bilgiler IRD'nin SQL_DESC_TYPE kayıt alanından döndürülür. Not: ODBC 2'de çalışmak için. x sürücüleribunun yerine SQL_DESC_CONCISE_TYPE kullanın.
SQL_DESC_TYPE_NAME (ODBC 1.0) CharacterAttributePtr Veri kaynağına bağımlı veri türü adı; örneğin, "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" veya "CHAR ( ) FOR BIT DATA".

Tür bilinmiyorsa boş bir dize döndürülür.
SQL_DESC_UNNAMED (ODBC 3.0) NumericAttributePtr SQL_NAMED veya SQL_UNNAMED. IRD'nin SQL_DESC_NAME alanı bir sütun diğer adı veya sütun adı içeriyorsa, SQL_NAMED döndürülür. Sütun adı veya sütun diğer adı yoksa SQL_UNNAMED döndürülür.

Bu bilgiler IRD'nin SQL_DESC_UNNAMED kayıt alanından döndürülür.
SQL_DESC_UNSIGNED (ODBC 1.0) NumericAttributePtr Sütunun imzasız olup olmadığını (veya sayısal olmadığını) SQL_TRUE.

Sütunun imzalı olup olmadığını SQL_FALSE.
SQL_DESC_UPDATABLE (ODBC 1.0) NumericAttributePtr Sütun, tanımlanan sabitlerin değerleriyle açıklanır:

SQL_ATTR_READONLY SQL_ATTR_WRITE SQL_ATTR_READWRITE_UNKNOWN

SQL_DESC_UPDATABLE temel tablodaki sütunu değil sonuç kümesindeki sütunun güncelleştirilebilirliğini açıklar. Sonuç kümesi sütununun temel aldığı temel sütunun güncelleştirilebilirliği bu alandaki değerden farklı olabilir. Sütunun güncelleştirilebilir olup olmadığı veri türüne, kullanıcı ayrıcalıklarına ve sonuç kümesinin tanımına bağlı olabilir. Sütunun güncelleştirilebilir olup olmadığı belirsizse SQL_ATTR_READWRITE_UNKNOWN döndürülmelidir.

SQLColAttribute, SQLDescribeColiçin genişletilebilir bir alternatiftir. SQLDescribeCol, ANSI-89 SQL'i temel alan sabit bir tanımlayıcı bilgisi kümesi döndürür. SQLColAttribute, ANSI SQL-92 ve DBMS satıcı uzantılarında bulunan daha kapsamlı tanımlayıcı bilgilere erişim sağlar.

Hakkında bilgi için Görmek
Sonuç kümesindeki bir sütuna arabellek bağlama SQLBindCol İşlevi
Deyim işlemeyi iptal etme SQLCancel İşlevi
Sonuç kümesindeki bir sütun hakkında bilgi döndürme SQLDescribeCol İşlevi
Veri bloğunu getirme veya sonuç kümesinde kaydırma SQLFetchScroll İşlevi
Birden çok veri satırı getirme SQLFetch İşlevi

Örnek

Aşağıdaki örnek kod, tanıtıcıları ve bağlantıları serbest tutmaz. Bkz. SQLFreeHandle İşlevi, Örnek ODBC Programıve SQLFreeStmt İşlevi kod örneklerinin tanıtıcıları ve deyimleri serbest tutmasını sağlar.

// SQLColAttribute.cpp  
// compile with: user32.lib odbc32.lib  
  
#define UNICODE  
  
#include <windows.h>  
#include <sqlext.h>  
#include <strsafe.h>  
  
struct DataBinding {  
   SQLSMALLINT TargetType;  
   SQLPOINTER TargetValuePtr;  
   SQLINTEGER BufferLength;  
   SQLLEN StrLen_or_Ind;  
};  
  
void printStatementResult(SQLHSTMT hstmt) {  
   int bufferSize = 1024, i;  
   SQLRETURN retCode;  
   SQLSMALLINT numColumn = 0, bufferLenUsed;
   
   retCode = SQLNumResultCols(hstmt, &numColumn);  
   
   SQLPOINTER* columnLabels = (SQLPOINTER *)malloc( numColumn * sizeof(SQLPOINTER*) );  
   struct DataBinding* columnData = (struct DataBinding*)malloc( numColumn * sizeof(struct DataBinding) );  
  
   printf( "Columns from that table:\n" );  
   for ( i = 0 ; i < numColumn ; i++ ) {  
      columnLabels[i] = (SQLPOINTER)malloc( bufferSize*sizeof(char) );  
  
      retCode = SQLColAttribute(hstmt, (SQLUSMALLINT)i + 1, SQL_DESC_LABEL, columnLabels[i], (SQLSMALLINT)bufferSize, &bufferLenUsed, NULL);  
      wprintf( L"Column %d: %s\n", i, (wchar_t*)columnLabels[i] );  
   }  
  
   // allocate memory for the binding  
   for ( i = 0 ; i < numColumn ; i++ ) {  
      columnData[i].TargetType = SQL_C_CHAR;  
      columnData[i].BufferLength = (bufferSize+1);  
      columnData[i].TargetValuePtr = malloc( sizeof(unsigned char)*columnData[i].BufferLength );  
   }  
  
   // setup the binding   
   for ( i = 0 ; i < numColumn ; i++ ) {  
      retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, columnData[i].TargetType,   
         columnData[i].TargetValuePtr, columnData[i].BufferLength, &(columnData[i].StrLen_or_Ind));  
   }  
  
   printf( "Data from that table:\n" );  
   // fetch the data and print out the data  
   for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt) ) {  
      int j;  
      for ( j = 0 ; j < numColumn ; j++ )  
         wprintf( L"%s: %hs\n", columnLabels[j], columnData[j].TargetValuePtr );  
      printf( "\n" );  
   }  
   printf( "\n" );   
}  
  
int main() {  
   int bufferSize = 1024, i, count = 1, numCols = 5;  
   wchar_t firstTableName[1024], * dbName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize ), * userName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize );  
   HWND desktopHandle = GetDesktopWindow();   // desktop's window handle  
   SQLWCHAR connStrbuffer[1024];  
   SQLSMALLINT connStrBufferLen, bufferLen;  
   SQLRETURN retCode;  
  
   SQLHENV henv = NULL;   // Environment     
   SQLHDBC hdbc = NULL;   // Connection handle  
   SQLHSTMT hstmt = NULL;   // Statement handle  
  
   struct DataBinding* catalogResult = (struct DataBinding*) malloc( numCols * sizeof(struct DataBinding) );  
   SQLWCHAR* selectAllQuery = (SQLWCHAR *)malloc( sizeof(SQLWCHAR) * bufferSize );  
  
   // connect to database  
   retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLCHAR *)(void*)SQL_OV_ODBC3, -1);  
   retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  
   retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);  
   retCode = SQLDriverConnect(hdbc, desktopHandle, L"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1025, &connStrBufferLen, SQL_DRIVER_PROMPT);  
   retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
   // display the database information  
   retCode = SQLGetInfo(hdbc, SQL_DATABASE_NAME, dbName, (SQLSMALLINT)bufferSize, (SQLSMALLINT *)&bufferLen);  
   retCode = SQLGetInfo(hdbc, SQL_USER_NAME, userName, (SQLSMALLINT)bufferSize, &bufferLen);  
  
   for ( i = 0 ; i < numCols ; i++ ) {  
      catalogResult[i].TargetType = SQL_C_CHAR;  
      catalogResult[i].BufferLength = (bufferSize + 1);  
      catalogResult[i].TargetValuePtr = malloc( sizeof(unsigned char)*catalogResult[i].BufferLength );  
   }  
  
   // Set up the binding. This can be used even if the statement is closed by closeStatementHandle  
   for ( i = 0 ; i < numCols ; i++ )  
      retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, catalogResult[i].TargetType, catalogResult[i].TargetValuePtr, catalogResult[i].BufferLength, &(catalogResult[i].StrLen_or_Ind));  
  
   retCode = SQLTables( hstmt, (SQLWCHAR*)SQL_ALL_CATALOGS, SQL_NTS, L"", SQL_NTS, L"", SQL_NTS, L"", SQL_NTS );  
   retCode = SQLFreeStmt(hstmt, SQL_CLOSE);  
  
   retCode = SQLTables( hstmt, dbName, SQL_NTS, userName, SQL_NTS, L"%", SQL_NTS, L"TABLE", SQL_NTS );  
  
   for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt), ++count )  
      if ( count == 1 )  
         StringCchPrintfW( firstTableName, 1024, L"%hs", catalogResult[2].TargetValuePtr );  
   retCode = SQLFreeStmt(hstmt, SQL_CLOSE);  
  
   wprintf( L"Select all data from the first table (%s)\n", firstTableName );  
   StringCchPrintfW( selectAllQuery, bufferSize, L"SELECT * FROM %s", firstTableName );  
  
   retCode = SQLExecDirect(hstmt, selectAllQuery, SQL_NTS);  
   printStatementResult(hstmt);  
}  

Ayrıca Bkz.

ODBC API Başvurusu
ODBC Üst Bilgi Dosyaları

Örnek ODBC Programı