3

我正在尝试使用 prepareCall 通过 JDBC 连接设置应用程序角色。它似乎工作正常(即语法方面),但 SQL Server 2008 返回此错误:

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 驱动程序)无法关闭 Prepared Statements 或 Statement Pooling。因此,发送到数据库的所有内容都包装在 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 回答