ACISessionBegin()

ACISessionBegin()

作用:

使用登录信息在指定的连接类句柄上打开与数据库服务的连接。

语法:

sword ACISessionBegin ( ACISvcCtx     *svchp,
                        ACIError      *errhp,
                        ACISession    *usrhp,
                        ub4            credt,
                        ub4            mode );

参数:

  • svchp (IN)

一个上下文句柄,必须是已经设置了服务器句柄的服务上下文句柄。

  • errhp (IN)

错误句柄,该接口调用失败时,错误信息会存在该句柄上,调用 ACIErrorGet 获得错误信息。

  • usrhp (IN/OUT)

session句柄,执行登录之前,该句柄上必需已经设置了登录的用户名和口令

  • credt (IN)
  • ACI_CRED_RDBMS

通过用户名和口令与数据库服务建立起连接。用户名和密码的必须通过设置session上下文的属性中设置这两个属性:ACI_ATTR_USERNAME 和 ACI_ATTR_PASSWORD

  • mode (IN)

指定各种操作模式。有效模式为

  • ACI_DEFAULT

在此模式下,只能使用svchp中指定的服务器上下文设置返回的用户会话上下文。对于编码,服务器句柄使用环境句柄中的设置。

  • ACI_STMT_CACHE

在给定的服务句柄上启用具有默认大小(1024)的语句缓存。 如果应用程序稍后可在在该服务句柄上使用ACI_ATTR_STMTCACHESIZE显式设置大小。

说明:

必须调用 ACISessionBegin 后,然后才能对其发出请求。 ACISessionBegin 仅支持对用户进行身份验证,以访问服务上下文中由服务器句柄指定的数据库。换句话说,在调用 ACIServerAttach 初始化服务器句柄之后,必须调用 ACISessionBegin 对给定服务器的用户进行身份验证。

使用Unicode时,如果模式或环境句柄具有适当的设置,则在会话句柄usrhp中设置的用户名和密码应使用Unicode。 在调用此函数以用户名和密码启动会话之前,您必须已调用 ACIAttrSet 以将这两个Unicode字符串设置为具有相应长度(以字节为单位)的会话句柄,因为 ACIAttrSet 仅采用了无符号指针。 然后由 ACISessionBegin 解释字符串缓冲区。

在为服务器句柄调用 ACISessionBegin 之后,应用程序可能会再次调用 ACISessionBegin 来初始化另一个具有不同(或相同)凭据和不同(或相同)操作模式的用户会话句柄。

调用 ACISessionBegin 提供凭据,支持两种方法。第一种方法是在传递给 ACISessionBegin 的用户会话句柄中为数据库身份验证提供有效的用户名和密码对。这涉及到使用 ACIAttrSet 在用户会话句柄上设置ACI_ATTR_USERNAME和ACI_ATTR_PASSWORD属性。然后用ACI_CRED_RDBMS调用 ACISessionBegin

当使用 ACISessionEnd 终止用户会话句柄时,用户名和密码属性保持不变,因此可以在将来调用 ACISessionBegin 时重用。否则,必须在下一次 ACISessionBegin 调用之前将它们重置为新值。

示例:

下面的代码示例演示了 ACISessionBegin 的用法。此代码段分配用户会话句柄,设置用户名和密码属性,调用 ACISessionBegin ,然后将用户会话设置到服务上下文中:

ACIHandleAlloc((void  *)envhp, (void  **)&usrhp, (ub4)
   ACI_HTYPE_SESSION, (size_t) 0, (void  **) 0);
ACIAttrSet((void  *)usrhp, (ub4)ACI_HTYPE_SESSION, (void  *)"sysdba",(ub4)strlen("sysdba"), ACI_ATTR_USERNAME, errhp);
ACIAttrSet((void  *)usrhp, (ub4)ACI_HTYPE_SESSION, (void  *)"szoscar55", (ub4)strlen("szoscar55"), ACI_ATTR_PASSWORD, errhp);
checkerr(errhp, ACISessionBegin (svchp, errhp, usrhp, ACI_CRED_RDBMS,ACI_DEFAULT));
ACIAttrSet((void  *)svchp, (ub4)ACI_HTYPE_SVCCTX, (void  *)usrhp,(ub4)0, ACI_ATTR_SESSION, errhp);