2012-03-06 136 views
0

我想從一個應用程序鎖定表,並插入一些數據。我的要求是,如果該表已被任何其它的過程,然後我需要嘗試一個特定的時間量之後鎖定鎖定。異步執行失敗

我使用unixODBC驅動程序在CentOS的機器和我的數據庫PostgreSQL的是。我做了一個關於如何使用odbc api異步執行sql的研究。我發現SQLSetStmtAttr api可以用來異步執行sql語句。但它不工作。

這是我寫的代碼:

ret = SQLSetStmtAttr(stmt1, SQL_ATTR_ASYNC_ENABLE,(SQLPOINTER) SQL_ASYNC_ENABLE_ON, 0); 
// above statement returned success 

if((ret = SQLExecDirect(stmt1,"lock table test",SQL_NTS)) == SQL_STILL_EXECUTING) 
    { 
    printf("\nCanceling\n"); 
    ret = SQLCancel(stmt); 
    } 

//但過程越來越掛在SQLExecDirect的API,爲表「測試」已被其他進程鎖定。 (杭在這個意義上,等待所有其他進程釋放鎖)

爲什麼會這樣呢?是因爲我的unixODBC驅動程序不支持異步執行。如果它那麼爲什麼SQLSetStmtAttr返回成功?

任何幫助是極大的讚賞。提前致謝。

回答

1

是否使用freetds的驅動程序?你提到unixODBC,我認爲它是一個驅動程序管理器,而不是驅動程序本身。

我看着freetds的ODBC驅動程序代碼。

看起來即使對SQLSetStmtAttr()不設置SQL_ASYNC_ENABLE_ON的工作,實際上利用這個屬性的功能是使用硬編碼值SQL_ASYNC_ENABLE_OFF。