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.
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.
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
CharacterAttributePtr bir işaretçiyse BufferLength değeri SQL_IS_POINTER olmalıdır.
CharacterAttributePtr bir karakter dizesinin işaretçisiyse bufferLengtharabellek 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ı
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 | |
| 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 |
| 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 İşlev çağrıldı ve yürütmeyi tamamlamadan önce SQLCancel |
| 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) |
| HY091 | Geçersiz tanımlayıcı alan tanımlayıcısı | FieldIdentifier |
| 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 |
| 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
Performans nedenleriyle, bir uygulama bir deyimi yürütmeden önce SQLColAttribute
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
Ş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
Not
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.
| 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 |
| 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 |
| 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 |
| 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. |
| 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.
İlgili İşlevler
| 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ı