2014-07-15 100 views
2

我對SqlAnywhere使用node.js driverSqlAnywhere的Node.js驅動程序 - 已準備好的語句

我得到「準備好的語句的資源管理器」超出了「」錯誤。

起初,我正在執行我的查詢是這樣的:

connection.exec(myQuery, myArgs, myCallback); 

其中myQuery應該是這樣的:有更改爲MyQuery

connection.exec(myQuery, myCallback); 

"SELECT * FROM some_procedure(?, ?, ?);" 

然後我把它改成現在看起來像這樣:

"SELECT * FROM some_procedure(%s);" 

,然後格式化使用util.format查詢:

myQuery = util.format(query, args.join(',')); 

...但我仍然得到同樣的錯誤。這是爲什麼發生?

如何防止連接創建一堆準備好的語句?

謝謝!

編輯:我知道有一個連接限制爲50(默認值)準備語句。

回答

2

我認爲在sqlanywhere api中有一個錯誤。 我檢查自己的代碼,似乎他們當你傳遞一個回調

if(callback_required) { 
    Local<Function> callback = Local<Function>::Cast(args[cbfunc_arg]); 
    baton->callback = Persistent<Function>::New(callback); 

    int status; 
    status = uv_queue_work(uv_default_loop(), req, executeWork, (uv_after_work_cb)executeAfter); 
    assert(status == 0); 

    return scope.Close(Undefined()); 
    } 

的語句降代碼僅此回調後執行的查詢不降的聲明,如果

if(baton->sqlany_stmt != NULL) { 
    api.sqlany_free_stmt(baton->sqlany_stmt); 
    } 

不管怎麼說作爲解決方法,我建議您爲每個查詢創建一個statement,然後在drop之後執行它。

在他們的github中報告這個錯誤也會很有趣。

+1

謝謝,確實創建了一個聲明,然後放棄它,解決了我的問題。我會在他們的github上報告這個錯誤。謝謝你的幫助! –

+1

感謝您報告此問題。它已被修復,並且新版本已上傳到npm和github。 –

相關問題