3

prepareCallを使用してJDBC接続を介してアプリケーションの役割を設定しようとしています。正常に動作しているように見えますが(つまり、構文的には)、SQLServer2008は次のエラーを返します。

Application roles can only be activated at the ad hoc level

ストアドプロシージャなどからこれを起動するのではなく、JDBC接続から直接起動します。

CallableStatement cstmt = con.prepareCall("{call sys.sp_setapprole(?, ?, ?, ?)}");
//setup all the IN and OUT parameters here
cstmt.execute();

これが機能しない理由について何かアイデアはありますか?

4

2 に答える 2

3

私が使用していたJDBCドライバーであるMicrosoftのJDBCドライバーには、プリペアドステートメントまたはステートメントプーリングをオフにする方法がありません。したがって、データベースに送信されたものはすべてsp_prepexec()にラップされ、sys.sp_setapprole()が検出し、別のプロシージャ内にラップできず、データベース上で直接実行する必要があるため、気に入らなかった。残念ながら、解決策は別のJDBCドライバーを使用することです。

于 2011-08-04T16:01:25.503 に答える
3

次のコードを使用してsp_setapproleを実行します。

// substitute userName and password with your own code
try {
  String sql = "EXEC sp_setapprole '" + userName + "', '" + password + "'";
  Statement st = con.createStatement();
  st.execute(sql);
} catch (Exception ex) {
  ex.printStackTrace();
}
于 2013-11-18T05:06:57.123 に答える