Aracılığıyla paylaş


Durum Geçişleri

ODBC her ortam, her bağlantı ve her deyim için ayrı durumlarını tanımlar. Örneğin, ortamın üç olası durumu vardır: Ayrılmamış (hiçbir ortamın ayrılmadığı), Ayrılmış (bir ortamın ayrıldığı ancak hiç bağlantı ayrılmadığı) ve Bağlantı (bir ortamın ve bir veya daha fazla bağlantının ayrıldığı). Bağlantıların yedi olası durumu vardır; açıklamaların 13 olası durumu vardır.

Uygulama bir işlevi veya işlevleri çağırıp o öğenin tutamacını geçtiğinde, belirli bir öğe bir durumdan diğerine geçer. Bu tür hareketlere durum geçişi denir. Örneğin, SQLAllocHandle ile bir ortam tutamacı tahsis etmek, ortamı Ayrılmamış'tan Ayrılmış'a taşır ve SQLFreeHandle ile bu tutamacı serbest bırakarak, yeniden Ayrılmamış durumuna döndürür. ODBC sınırlı sayıda yasal durum geçişi tanımlar ve bu da işlevlerin belirli bir sırada çağrılması gerektiğini söylemenin başka bir yoludur.

SQLGetConnectAttr gibi bazı işlevler durumu hiç etkilemez. Diğer işlevler tek bir öğenin durumunu etkiler. Örneğin, SQLDisconnect bir bağlantıyı Bağlantı durumundan Ayrılmış durumuna taşır. Son olarak, bazı işlevler birden fazla öğenin durumunu etkiler. Örneğin, SQLAllocHandle ile bağlantı tutamacını ayırmak, bağlantıyı Ayrılmamış durumundan Ayrılmış durumuna taşır ve ortamı Ayrılmış durumundan Bağlantı durumuna taşır.

Bir uygulama bir işlevi sıra dışı çağırırsa işlev durum geçiş hatası döndürür. Örneğin, bir ortam Bağlantı durumundaysa ve uygulama bu ortam tanıtıcısıyla SQLFreeHandle'ı çağırırsa, SQLFreeHandle SQLSTATE HY010 (İşlev dizisi hatası) döndürür çünkü ortam yalnızca Ayrılmış durumda olduğunda çağrılabilir. ODBC, bunu geçersiz durum geçişi olarak tanımlayarak etkin bağlantılar varken uygulamanın ortamı boşaltmasını engeller.

Bazı durum geçişleri ODBC tasarımında doğaldır. Örneğin, bir bağlantı tutamacını ayıran işlev bir ortam tutamacını gerektirdiğinden, önce bir ortam tanıtıcısı ayırmadan bağlantı tutamacını ayırmak mümkün değildir. Diğer durum geçişleri Sürücü Yöneticisi ve sürücüler tarafından sağlanır. Örneğin, SQLExecute hazırlanmış bir deyimi yürütür. Geçirilen betik tanıtıcısı Hazırlanmış durumda değilse, SQLExecute SQLSTATE HY010 (İşlev dizisi hatası) döndürür.

Uygulamanın bakış açısından, durum geçişleri genellikle basittir: Yasal durum geçişleri iyi yazılmış bir uygulamanın akışıyla el ele gitme eğilimindedir. Ortam, her bağlantı ve her deyimin durumunu izlemeleri gerektiğinden, Sürücü Yöneticisi ve sürücüler için durum geçişleri daha karmaşıktır. Bu işin çoğu Sürücü Yöneticisi tarafından yapılır; sürücüler tarafından yapılması gereken işlerin çoğu bekleyen sonuçlara sahip deyimlerle gerçekleşir.

Bu kılavuzun 1. ve 2. bölümleri ("ODBC'ye Giriş" ve "Uygulama ve Sürücü Geliştirme") durum geçişlerinden açıkça bahsetmeme eğilimindedir. Bunun yerine, işlevlerin çağrılma sırasını açıklar. Örneğin, "Executeing Statements" bir deyimin SQLExecute ile yürütülebilmesi için önce SQLPrepare ile hazırlanması gerektiğini belirtir. Sürücü Yöneticisi tarafından denetlenen ve sürücüler tarafından denetlenecek geçişler de dahil olmak üzere durumların ve durum geçişlerinin tam açıklaması için bkz . Ek B: ODBC Durum Geçiş Tabloları.