Makale numarası: 294169 - Son Gözden Geçirme: 12 Mayıs 2003 Pazartesi - Gözden geçirme: 2.1

Belge: Uzunluk değişkenleri için Unicode ODBC işlevleri, açıklama.

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Özet

ODBC Sürücü Yöneticisi 3.5 veya sonraki bir sürümü, karakter dizelerini veya SQLPOINTER işaretçiler, bağımsız değişken olarak kabul tüm işlevler ve Unicode, hem ANSI sürümlerini destekler. Unicode işlevleri işlevleri ile "G", SQLExecDirectW ve SQLGetInfoW gibi bir sonek olarak uygulanır.

Çoğu bu <a0>Unicode</a0> işlevlerin, ODBC Programmer's Reference işlev bağımsız değişken için yanlış veya belirsiz açıklamalar sağlar. Özellikle, bu sorun, uzunlukta karakter dizesi giriş ve çıkış değerleri belirtmek için kullanılan bağımsız değişkenleri ilişkilendirir.

Daha fazla bilgi

Giriş veya çıkış dizesinde bayt veya karakter uzunluğu olan bir bağımsız değişken belirtmeniz gerekir mi <a0>ODBC</a0> belgelerinde sorunları içerir. (Yalnızca tek bir bayt her ANSI karakter kaplayacak) Bu işlevler ANSI sürümü için dize bayt sayısı karakter sayısı eşit olduğundan, böylece bu koşulları "bayt" ve "karakteri" etkin birbirlerinin yerine kullanılabilir. Ancak, Unicode dizelerle her karakterin iki baytlık alan kaplar. Bu nedenle, bir <a0>Unicode</a0> işlevine uzunluğu girdileri bir bayt veya karakter sayısını belirtmeniz gerekir mi ayırt etmek çok önemlidir.

"Karakteri" sözcüğün yerine kullanılmış, bazı durumlarda, belgelere "bayt" sözcüğünü kullanır. Diğer durumlarda, belgeleri her zaman yanlış değildir, ancak bu değer, bir sayımını bayt veya karakter sayısını olmalıdır olup olmadığını açıkça belgelenmesi olmadan, bir "" dizesinin uzunluğu bir gerekli olduğunu belirtir.

Ne belgelere her ODBC işlevini belirten bakılmaksızın, "Bölüm 17: programlama konuları" ODBC Programmer's Reference içinde <a1>Unicode</a1> bölümünden aşağıdaki paragrafı Unicode fonksiyonlarda uzunluğu bağımsız değişken için en son kural şudur:
"Unicode işlevleri, her zaman geri dönmek veya dizeler ya da uzunluğu bağımsız değişkenler sayı, karakter olarak geçirilir. Sunucu veri uzunluğu döndürmesini işlevleri, görüntü boyutu ve duyarlık karakter sayısı açıklanmıştır. Uzunluğu (veriler aktarım boyutu) bir uzunlukta dize veya nonstring veri başvurduğunuzda Sekizli uzunluğu açıklanır. Örneğin, SQLGetInfoW hala uzunluğunu bayt sayısı olarak alır, ancak SQLExecDirectW karakter sayısını kullanır."
Söz konusu bağımsız değişken uzunluğu karakter dizesindeki yansıtır sonra her zaman (genellikle bir SQLCHAR gösterilen) bir dize olan başka bir bağımsız değişken uzunluğu tanımlıyorsa, yani. Bir dize veya (genellikle bir SQLPOINTER gösterilen) başka bir veri türü olan başka bir bağımsız değişken uzunluk değişkeni açıklar, bayt cinsinden uzunluğudur.

Aşağıdaki tabloda tüm Unicode sürümlerde ODBC API işlevleri listeler. Listelenen her işlev, tablo <a0>ODBC</a0> belgelerinde bilinen sorunlar vurgular ve söz konusu uzunluğu bağımsız değişkenlerin daha eksiksiz bir açıklaması sağlar.

Bu tabloyu kapaBu tabloyu aç
FunctionBağımsız değişken adıGeçerli açıklamasıDüzeltilmiş açıklaması
SQLBrowseConnectStringLength1Uzunluk * InConnectionString.Uzunluk * InConnectionString (karakter.
BufferLengthUzunluğu * OutConnectionString arabellek.Uzunluğu * OutConnectionString arabellekte, karakter.
StringLength2PtrBayt (boş sonlandırma bayt hariç) toplam sayısı kullanılabilir olarak verilecek * OutConnectionString.Karakter (boş sonlandırma karakteri hariç) toplam sayısı kullanılabilir olarak verilecek * OutConnectionString.
SQLColAttributeBufferLengthFieldIdentifier bir ODBC tanımlı alan ve bir karakter dizesi ya da ikili arabellek CharacterAttributePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * CharacterAttributePtr. FieldIdentifier ODBC tanımlı bir alanı ise ve * CharacterAttributePtr bir tamsayı ise, bu alan yoksayıldı. * CharacterAttributePtr bir Unicode dizesi (SQLColAttributeW çağrılırken) ise, BufferLength bağımsız değişken bir çift sayı olmalıdırBu doğru mu? BufferLength CharacterAttributePtr değeri kullanılabilen bayt sayısını gösterir.
StringLengthPtrIşaretçi bir arabelleğe sığdığında bayt (karakter verisi boş sonlandırma baytının hariç) toplam sayısı kullanılabilir olarak verilecek * CharacterAttributePtr.Bu doğru mu?
SQLColAttributesBu işlev SQLColAttribute (yukarı bakın)</a0> için onaylanmaz gibi.
SQLColumnPrivilegesNameLength1 4Uzunluk * katalogadı. (Burada uzunluğu değerleri içeren dört farklı bağımsız olduğuna dikkat edin. Her biri farklı bir giriş veya çıkış arabelleği (katalogadı SchemaName, TableName ve ColumnName gibi gösterir. Tüm işlevleriyle benzer giriş değerleri için kolaylık olması için bu tabloları birleştirir, bu tür NameLength bağımsız yerine, her biri ayrı olarak listeleniyor.)Uzunluk * katalogadı (karakter.
SQLColumnsNameLength1 4Uzunluk * katalogadı.Uzunluk * katalogadı (karakter.
SQLConnectNameLength1 3Uzunluk * sunucuadı.Uzunluk * sunucuadı, karakter.
SQLDataSourcesBufferLength1Uzunluğu * sunucuadı arabellekte, bayt.Uzunluğu * sunucuadı arabellekte, karakter.
NameLength1PtrIşaretçi bir arabelleğe sığdığında bayt (boş sonlandırma bayt hariç) toplam sayısı. Işaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı.
BufferLength2Uzunluğu * açıklama bir arabellek.Uzunluğu * açıklama arabellekte, karakter.
NameLength2PtrIşaretçi bir arabelleğe sığdığında bayt (boş sonlandırma bayt hariç) toplam sayısı kullanılabilir olarak verilecek * açıklaması.Işaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı kullanılabilir olarak verilecek * açıklaması.
SQLDescribeColBufferLengthUzunluğu * ColumnName arabellekte, karakter.Bu doğru mu?
NameLengthPtrIşaretçi bir arabelleğe sığdığında bayt (boş sonlandırma bayt hariç) toplam sayısı kullanılabilir olarak verilecek * ColumnName.Işaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı kullanılabilir olarak verilecek * ColumnName.
SQLDriverConnectStringLength1Uzunluk * InConnectionString (bayt cinsinden.Uzunluk * InConnectionString (karakter.
BufferLengthUzunluğu * OutConnectionString arabellek. * OutConnectionString bir Unicode dizesi (SQLDriverConnectW çağrılırken) değerdir, BufferLength bağımsız değişken bir çift sayı olmalıdır.Uzunluğu * OutConnectionString arabellekte, karakter. (Bu bağımsız değişkeni bir çift sayı olarak sahip DEĞIL yani unutmayın.)
StringLength2PtrIşaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı kullanılabilir olarak verilecek * OutConnectionString.Bu doğru mu?
SQLDriversBufferLength1Uzunluğu * DriverDescription arabellekte, bayt.Uzunluğu * DriverDescription arabellekte, karakter.
DescriptionLengthPtrIşaretçi bir arabelleğe sığdığında bayt (boş sonlandırma bayt hariç) toplam sayısı kullanılabilir olarak verilecek * DriverDescription.Işaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı kullanılabilir olarak verilecek * DriverDescription.
BufferLength2Uzunluğu * DriverAttributes arabellekte, bayt. * DriverDescription bir Unicode dizesi (SQLDriversW çağrılırken) değerdir, BufferLength bağımsız değişken bir çift sayı olmalıdır.Uzunluğu * DriverAttributes arabellekte, karakter. (Bu bağımsız değişkeni bir çift sayı olarak sahip DEĞIL yani unutmayın.)
AttributesLengthPtrIşaretçi bir arabelleğe sığdığında bayt (boş sonlandırma bayt hariç) toplam sayısı kullanılabilir olarak verilecek * DriverAttributes.Işaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı kullanılabilir olarak verilecek * DriverAttributes.
SQLErrorBu işlev için SQLGetDiagRec kalmıştır.
SQLExecDirectTextLengthUzunluk * StatementText.Uzunluk * StatementText (karakter.
SQLForeignKeysNameLength1 2Uzunluk * PKCatalogName (bayt cinsinden.Uzunluk * PKCatalogName (karakter.
NameLength3 6Uzunluk * PKTableName.Uzunluk * PKTableName (karakter.
SQLGetConnectAttrBufferLengthDeğer * ValuePtr bir Unicode dizesi (SQLGetConnectAttrW çağrılırken) ise, BufferLength bağımsız değişken bir çift sayı olmalıdır. Bu doğru mu? BufferLength bir bayt sayımı içermesi gerekir.
StringLengthPtrBir arabelleğe sığdığında bayt (boş sonlandırma karakteri hariç) toplam sayısını gösteren BIR işaretçi de geri dönmek kullanılabilir * ValuePtr.Bu doğru mu?
SQLGetConnectOptionBu işlev için SQLGetConnectAttr kalmıştır.
SQLGetCursorNameBufferLengthUzunluk * imleçadı (bayt cinsinden. Değer * imleçadı bir Unicode dizesi (SQLGetCursorNameW çağrılırken) ise, BufferLength bağımsız değişken bir çift sayı olmalıdır.Uzunluk * imleçadı (karakter. (Bu bağımsız değişkeni bir çift sayı olarak sahip DEĞIL yani unutmayın.)
NameLengthPtrBellek (boş sonlandırma karakteri dışında) bayt sayısını döndürmek, işaretçi, geri dönmek kullanılabilir * imleçadı.Bellekte bulunan karakterleri (karakter null sonlandırma hariç) toplam sayısı için bir işaretçi de geri dönmek kullanılabilir * imleçadı.
SQLGetDescFieldBufferLengthDeğer * ValuePtr Unicode veri türünü (SQLGetDescFieldW çağrılırken) ise, BufferLength bağımsız değişken bir çift sayı olmalıdır.Bu doğru mu? BufferLength bir bayt sayımı içermesi gerekir.
StringLengthPtrArabelleğin bayt (karakter null sonlandırma için gerekli olan bayt sayısını hariç) toplam sayısını döndürmek, işaretçi, geri dönmek kullanılabilir * ValuePtr.Bu doğru mu?
SQLGetDescRecBufferLengthUzunluğu * adı arabellekte, bayt.Uzunluğu * adı arabellekte, karakter.
StringLengthPtrBir arabelleğe sığdığında, geri dönmek kullanılabilir veri baytları sayısı için BIR işaretçi * adı arabellek, null sonlandırma karakteri dışında.Bir arabelleğe sığdığında, geri dönmek için karakter sayısını gösteren BIR işaretçi * adı arabellek, null sonlandırma karakteri dışında.
SQLGetDiagFieldBufferLengthDeğer * DiagInfoPtr bir Unicode dizesi (SQLGetDiagFieldW çağrılırken) ise, BufferLength bağımsız değişken bir çift sayı olmalıdır.Bu doğru mu? BufferLength bir bayt sayımı içermesi gerekir.
StringLengthPtrIşaretçi bir arabelleğe sığdığında bayt (karakter null sonlandırma için gerekli olan bayt sayısını hariç) toplam sayısı kullanılabilir olarak verilecek * DiagInfoPtr (karakter verisi için. Bu doğru mu?
SQLGetDiagRecBufferLengthUzunluğu * karakterlerini MessageText arabellekte.Bu doğruysa
TextLengthPtrIşaretçi bir arabelleğe sığdığında bayt (karakter null sonlandırma için gerekli olan bayt sayısını hariç) toplam sayısı kullanılabilir olarak verilecek * MessageText. Işaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı kullanılabilir olarak verilecek * MessageText.
SqlgetınfoBufferLengthUzunluğu * InfoValuePtr arabellek. * (SQLGetInfoW çağrılırken), bir Unicode dizesi InfoValuePtr ise, BufferLength bağımsız değişken bir çift sayı olmalıdır.Bu doğru mu? BufferLength bir bayt sayımı içermesi gerekir.
StringLengthPtrIşaretçi bir arabelleğe sığdığında bayt (karakter verileri için boş sonlandırma karakteri hariç) toplam sayısı kullanılabilir olarak verilecek * InfoValuePtr.Bu doğru mu?
SQLGetStmtAttrBufferLengthÖznitelik ODBC tanımlı bir öznitelik bir karakter dizesini veya bir ikili arabellek ValuePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * ValuePtr. Döndürülen değer, * (SQLGetStmtAttrW çağrılırken), bir Unicode dizesi ValuePtr ise, BufferLength bağımsız değişken bir çift sayı olmalıdırBu doğru mu? BufferLength bir bayt sayımı içermesi gerekir.
StringLengthPtrBir arabelleğe sığdığında bayt (boş sonlandırma karakteri hariç) toplam sayısını gösteren BIR işaretçi de geri dönmek kullanılabilir * ValuePtr.Bu doğru mu?
SQLNativeSQLTextLength1Uzunluk * InStatementText metin dizesi.Uzunluk * InStatementText metin dizesindeki karakter.
BufferLengthUzunluğu * OutStatementText arabellek. Döndürülen değer, * (SQLNativeSqlW çağrılırken), bir Unicode dizesi InStatementText ise, BufferLength bağımsız değişken bir çift sayı olmalıdır.Uzunluğu * OutStatementText arabellekte, karakter. (Bu bağımsız değişkeni bir çift sayı olarak sahip DEĞIL yani unutmayın.)
TextLength2PtrIşaretçi bir arabelleğe sığdığında bayt (boş sonlandırma bayt hariç) toplam sayısı kullanılabilir olarak verilecek * OutStatementText.Işaretçi bir arabelleğe sığdığında karakterleri (karakter null sonlandırma hariç) toplam sayısı kullanılabilir olarak verilecek * OutStatementText.
SQLPrepareTextLengthUzunluk * StatementText.Uzunluk * StatementText (karakter.
SQLPrimaryKeysNameLength1 3Bayt olarak uzunluğu * katalogadı.Uzunluk * katalogadı (karakter.
SQLProcedureColumnsNameLength1 4Uzunluk * katalogadı.Uzunluk * katalogadı (karakter.
SQLProceduresNameLength1 3Bayt olarak uzunluğu * katalogadı.Uzunluk * katalogadı (karakter.
SQLSetConnectAttrStringLengthÖznitelik ODBC tanımlı bir öznitelik bir karakter dizesini veya bir ikili arabellek ValuePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * ValuePtr.Öznitelik ODBC tanımlı bir öznitelik bir karakter dizesini veya bir ikili arabellek ValuePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * ValuePtr. Karakter dizesi verileri için bu bağımsız değişken dizesinde bayt içermelidir.
SQLSetConnectOptionBu işlev için SQLSetConnectAttr kalmıştır.
SQLSetCursorNameNameLengthUzunluk * imleçadı.Uzunluk * imleçadı (karakter.
SQLSetDescFieldBufferLengthFieldIdentifier bir ODBC tanımlı alan ve bir karakter dizesini veya bir ikili arabellek ValuePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * ValuePtr.FieldIdentifier bir ODBC tanımlı alan ve bir karakter dizesini veya bir ikili arabellek ValuePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * ValuePtr. Karakter dizesi verileri için bu bağımsız değişken dizesinde bayt içermelidir.
SQLSetStmtAttrStringLengthÖznitelik ODBC tanımlı bir öznitelik bir karakter dizesini veya bir ikili arabellek ValuePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * ValuePtr.Öznitelik ODBC tanımlı bir öznitelik bir karakter dizesini veya bir ikili arabellek ValuePtr işaret, bu bağımsız değişken uzunluğu olmalıdır * ValuePtr. Karakter dizesi verileri için bu bağımsız değişken dizesinde bayt içermelidir.
SQLSpecialColumnsNameLength1 3Uzunluk * TableName.Uzunluk * TableName, karakter.
SQLStatisticsNameLength1 3Uzunluk * katalogadı.Uzunluk * katalogadı (karakter.
SQLTablePrivilegesNameLength1 3Uzunluk * katalogadı.Uzunluk * katalogadı (karakter.
SQLTablesNameLength1 4Uzunluk * katalogadı.Uzunluk * katalogadı (karakter.

Karakter dizeleri olarak StringLength1 ve BufferLength belirtmeniz gerekir; böylece yukarıdaki InConnectionString ve OutConnectionString bağımsız değişkenleri tablosundan SQLDriverConnect örneği kullanarak her ikisi de SQLCHAR * tanımlanır. Buna ek olarak, Sqlgetınfo işlevi düşünün. Bu işlev bir InfoValuePtr girdisini alır ve bu giriş uzunluğunu BufferLength geçirilir. Dizeleri hem de diğer veri türlerini InfoValuePtr içerebileceğinden bu bir SQLPOINTER olur. Bu nedenle, yukarıda açıklandığı kuralları uygulamak, BufferLength karakterler yerine bayt sayısı olacaktır.

Referanslar

Aşağıdaki Microsoft Bilgi Bankası makalesi SQLGetDiagRecW belgelerine düzeltildi yukarıdaki sorunu hakkında bilgi içerir:
243526  (http://support.microsoft.com/kb/243526/EN-US/ ) Belge: ODBC özellik hatalı SQLGetDiagRecW alıyor Bufferlength içinde sayı byte bildiren

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Open Database Connectivity 3.5
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
Anahtar Kelimeler: 
kbmt kbbug kbdocerr KB294169 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:294169  (http://support.microsoft.com/kb/294169/en-us/ )