“OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用”的处理方法收藏...

本文提供了解决OCIEnvNlsCreate失败,返回代码为-1的问题方法,同时介绍了如何处理System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本的情况。解决方案包括给oracle/ora92目录添加networkservice用户的权限,并重启IIS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用”的处理方法

“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本 ”

的处理方法应该相似,没具体试过。

给oracle/ora92的目录加上network service用户的权限就可以了。

方法:右击ora92,选择属性,点击“安全”选卡,点击添加按钮,点击“高级”,“立即查找”

在用户列表中点击“network service”,确定即可。

 

cmd下, win7以管理员方式打开,  iisreset即可

转载于:https://www.cnblogs.com/hanyun/archive/2009/05/15/1457850.html

oci.dll 是 Oracle Call Interface(简称 OCI)的一部分,是一个动态链接库,主要用于在应用程序中调用 Oracle 数据库的功能。它支持多种编程语言,包括 C、C++、Java 等,为开发者提供了丰富的 API 接口,可以用于执行数据库连接、查询、更新等操作[^1]。 oci.dll 的主要作用包括但限于: - **数据库连接管理**:允许应用程序与 Oracle 数据库建立连接,支持多种连接方式,包括直接连接和通过中间层连接。 - **SQL 语句执行**:提供执行 SQL 语句的能力,包括查询、插入、更新和删除等操作。 - **事务处理**:支持事务的开始、提交和回滚,确保数据的一致性和完整性。 - **错误处理**:提供详细的错误信息反馈机制,帮助开发者快速定位解决问题。 - **性能优化**:通过缓存、批处理等技术提高数据访问效率,特别是在处理大规模数据和高发请求时表现优异[^2]。 使用场景方面,oci.dll 主要应用于需要与 Oracle 数据库进行交互的应用程序开发中,例如企业级应用、Web 应用、数据分析工具等。尤其是在需要高性能、高稳定性的数据库连接场景下,oci.dll 提供了强有力的支持。 对于开发者而言,使用 oci.dll 通常需要先安装 Oracle 客户端库,确保所需的动态链接库文件(如 oci.dll)位于系统的 PATH 环境变量所指定的目录中,或者位于应用程序的当前工作目录下。这样,当应用程序尝试加载 oci.dll 时,操作系统就能够找到正确加载该 DLL 文件,从而实现对 Oracle 数据库的操作能力。 ### 使用 oci.dll 的注意事项 - **版本兼容性**:确保使用的 oci.dll 版本与目标 Oracle 数据库版本兼容,以避免出现兼容的问题。 - **依赖项管理**:oci.dll 可能依赖于其他 DLL 文件,如 oraociei11.dll,确保所有必要的依赖项都已正确安装和配置。 - **安全设置**:在生产环境中,应合理配置权限,防止未授权访问数据库资源。 ### 示例代码 以下是一个简单的 C 语言示例,展示如何使用 oci.dll 进行数据库连接(注意,实际使用时需包含相应的头文件链接 oci.lib): ```c #include <oci.h> #include <stdio.h> int main() { OCIEnv *envhp; OCIServer *srvhp; OCISession *authp; OCIError *errhp; sword status; // 初始化环境 status = OCIEnvCreate(&envhp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL); if (status != OCI_SUCCESS) { printf("Failed to create environment.\n"); return 1; } // 分配错误句柄 status = OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR, 0, NULL); if (status != OCI_SUCCESS) { printf("Failed to allocate error handle.\n"); return 1; } // 分配服务器上下文 status = OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, 0, NULL); if (status != OCI_SUCCESS) { printf("Failed to allocate server context.\n"); return 1; } // 连接到服务器 status = OCIServerAttach(srvhp, errhp, (text *)"your_database", strlen("your_database"), OCI_DEFAULT); if (status != OCI_SUCCESS) { printf("Failed to attach to server.\n"); return 1; } // 分配会话句柄 status = OCIHandleAlloc((dvoid *)envhp, (dvoid **)&authp, OCI_HTYPE_SESSION, 0, NULL); if (status != OCI_SUCCESS) { printf("Failed to allocate session handle.\n"); return 1; } // 设置用户名和密码 status = OCIAttrSet((dvoid *)authp, OCI_HTYPE_SESSION, (dvoid *)"username", strlen("username"), OCI_ATTR_USERNAME, errhp); if (status != OCI_SUCCESS) { printf("Failed to set username.\n"); return 1; } status = OCIAttrSet((dvoid *)authp, OCI_HTYPE_SESSION, (dvoid *)"password", strlen("password"), OCI_ATTR_PASSWORD, errhp); if (status != OCI_SUCCESS) { printf("Failed to set password.\n"); return 1; } // 开始会话 status = OCISessionBegin(srvhp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT); if (status != OCI_SUCCESS) { printf("Failed to begin session.\n"); return 1; } // 在这里可以执行 SQL 操作... // 结束会话 OCISessionEnd(srvhp, errhp, authp, OCI_DEFAULT); // 分离服务器 OCIServerDetach(srvhp, errhp, OCI_DEFAULT); // 清理资源 OCIHandleFree((dvoid *)authp, OCI_HTYPE_SESSION); OCIHandleFree((dvoid *)srvhp, OCI_HTYPE_SERVER); OCIHandleFree((dvoid *)errhp, OCI_HTYPE_ERROR); OCIEnvNlsCreate(&envhp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL); return 0; } ``` 以上代码展示了如何初始化环境、分配必要的句柄、连接到数据库服务器、开始会话以及清理资源的基本流程。实际开发中,还需要根据具体需求添加 SQL 执行逻辑和其他错误处理机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值