3

ODBCを使用してローカルSQLServerに接続するHDBCへの最初のステップを示しています。

接続した後quickQuery、私はそれをすることができませんclose。私はcommit最初に実行する必要があります。

これは本来あるべき姿ですか?commitクエリのみを実行しているのになぜ必要なのですか?

GHCiについて:

m + Database.HDBC Database.HDBC.ODBC
conn <- connectODBC "Driver={SQL Server};Server=thiagon\\sqlserver2012;Database=senior;UID=framework;PWD=framework;"
vals <- quickQuery conn "SELECT TOP 5 * FROM whatever;" []
print vals
commit conn
disconnect conn

行を削除するとcommit conn、例外が発生します。

*** Exception: SqlError {seState = "[\"25000\"]", seNativeError = -1, seErrorMsg = "disconnect: [\"0: [Microsoft][ODBC SQL Server Driver]Estado de transa\\65533\\65533o inv\\65533lido\"]"}

メッセージはポルトガル語で、「無効なトランザクション状態」を意味します。

4

1 に答える 1

1

Aはテーブルを変更quickQuery できます。APIが文字列自体を分析したり、データベースをチェックして、テーブルが変更されたかどうかを確認したりすることはないと思います。また、HDBCは自動コミットをサポートしていません。

を使用するwithTransactionと、この詳細が自動的に処理されます。

編集:quickQuery'の厳密なバージョンである、を使用してみてくださいquickQueryhttp://book.realworldhaskell.org/read/using-databases.html(ch21 / query.hsまでスクロールダウン)の例では、プレーンなSELECTステートメントの後にコミットする必要はありませんでしたが、を使用していquickQuery'ました。

于 2012-12-19T14:37:40.120 に答える