★★★★★【200分求解OCI的一些问题】★★★★

九月鹰飞 2007-03-24 11:37:16
BOOL CHECK_USER_LOGIN(char *username, char *password)
{
sword status = NULL;
OCIDefine *defhp1 = NULL;
OCIBind *bindhp1 = NULL;
OCIBind *bindhp2 = NULL;
char show_username[20];
text *select_sql = (text *)"SELECT USERNAME FROM USER_INFO WHERE USERNAME=:username";// AND PASSWORD=:password";
int uname_len = sizeof(username)+1;
int upass_len = sizeof(password)+1;
INIT_DB_HANDLE();//初始环境变量

//分配语句句柄
CHECK_ERROR(errhp, OCIHandleAlloc(envhp, (void **)&stmthp, OCI_HTYPE_STMT, 0, 0));

//准备第一个语句
CHECK_ERROR(errhp, OCIStmtPrepare(stmthp, errhp, select_sql, strlen((char *)select_sql), OCI_NTV_SYNTAX, OCI_DEFAULT));


//绑定
CHECK_ERROR(errhp, OCIBindByPos(stmthp, &bindhp1, errhp, 1, (dvoid *)username, uname_len, SQLT_CHR, 0, 0, 0, 0, 0, OCI_DEFAULT));
CHECK_ERROR(errhp, OCIBindByPos(stmthp, &bindhp2, errhp, 2, (dvoid *)password, upass_len, SQLT_CHR, 0, 0, 0, 0, 0, OCI_DEFAULT));

//定义
CHECK_ERROR(errhp, OCIDefineByPos(stmthp, &defhp1, errhp, 1, (dvoid *) &show_username, sizeof(show_username), SQLT_STR, (dvoid *) 0, (ub2 *)0, (ub2 *)0, OCI_DEFAULT));

//查找用户是否存在
status = OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4)0, NULL, NULL, OCI_DEFAULT);
if(OCI_NO_DATA != status)
{
status = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
if(OCI_NO_DATA != status)
{
printf(show_username);
END_DB_CONNECTION();//释放环境变量
return TRUE;
}
}

END_DB_CONNECTION();//释放环境变量
return FALSE;
}
我在main中调用 CHECK_USER_LOGIN()并把用户名和密码带了进去。
如果sql语句把where后面去掉,就是不带username和password参数,
printf(show_username)能把用户打印出来,如果带了,status的值就是OCI_NO_DATA了。
如果只带username不带password参数,status的值也是OCI_NO_DATA。
问题可能出在OCIBindByPos上了。
求解:究竟该处如何写?

如果我用select count(*) from user_info where...这样的语句,OCIDefineByPos又如何写?我试着用SQLT_INT的类型来定义,提示报错。

我就该验证用户名和密码,咋就这么难的?

解答正确的人,另有100分奖励。
...全文
455 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
followme163 2007-05-09
  • 打赏
  • 举报
回复
如果你的username,userpassword类型为varchar(N),则c类型为char[N],定义输出类型为SQLT_STR,注意查询时用OCIDefineByPos并不是OCIBindByPos,前者用于查询数据,后者用于插入数据.输入输出函数别用错就是了.
风吹PP凉SS 2007-03-29
  • 打赏
  • 举报
回复
看不太懂,顶一下
wangminfei95888 2007-03-29
  • 打赏
  • 举报
回复
帮你顶
liujianleiwj 2007-03-27
  • 打赏
  • 举报
回复
select count(*) from user_info where...这样的语句 用SQLT_STR类型来定义
liujianleiwj 2007-03-27
  • 打赏
  • 举报
回复
我将你的程序修改如下,调试通过
1.
int uname_len = strlen(username)+1;
int upass_len = strlen(password)+1;
2.
OCIBindByPos(stmthp, &bindhp1, errhp, 1, (dvoid *)username, uname_len, SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT))//将SQLT_CHR改为SQLT_STR
game_zhang 2007-03-27
  • 打赏
  • 举报
回复
虽然不会OCI,但是看你的语句(text *)"SELECT USERNAME FROM USER_INFO WHERE USERNAME=:username";// AND PASSWORD=:password"; 觉得有点问题,=:username和=:password会被替换成你想要的内容吗?你可是把它放到字符串中了,建议你打印这个SQL语句看看!
九月鹰飞 2007-03-26
  • 打赏
  • 举报
回复
好急啊,版主中有人会吗?
九月鹰飞 2007-03-24
  • 打赏
  • 举报
回复
改了,但是还是不行啊。
  • 打赏
  • 举报
回复
没有这类的环境,不过
int uname_len = sizeof(username)+1;
int upass_len = sizeof(password)+1;

uname_len和upass_len都是5,如果是要求username长度的话,不能用sizeof,用strlen
bargio_susie 2007-03-24
  • 打赏
  • 举报
回复
帮你顶一下!
chensanniang 2007-03-24
  • 打赏
  • 举报
回复
帮你顶一下!
内容概要:本文围绕基于蜣螂优化算法(DBO)的无线传感器网络(WSN)覆盖优化问题展开研究,提出了一种创新性的智能优化解决方案,并提供了完整的Matlab代码实现。研究首先析了传统WSN覆盖优化中存在的覆盖率低、能耗不均等问题,随后引入蜣螂优化算法这一新型群体智能算法,通过模拟蜣螂的生物行为机制,构建了适用于传感器节点部署优化的数学模型。文中详细阐述了算法的设计思路、实现步骤及其在提高网络覆盖率、延长网络生命周期方面的有效性,同时通过仿真实验与其他主流优化算法进行了对比,验证了所提方法的优越性。; 适合人群:具备一定优化算法基础和Matlab编程能力,从事通信工程、物联网、智能优化等相关领域的研究生及科研人员。; 使用场景及目标:①解决无线传感器网络中节点部署不合理导致的覆盖盲区问题;②提升网络整体覆盖性能与资源利用效率;③为智能优化算法在实际工程中的应用提供可复现的研究案例和技术参考。; 阅读建议:建议读者结合文中的Matlab代码进行实践操作,重点关注算法参数设置、适应度函数设计及仿真结果析部,同时可尝试将该算法迁移至路径规划、资源调度等其他优化场景中进行拓展研究。
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 在信息技术领域,特别是软件编程行业,微软公司推出的集成开发环境(IDE)Visual Studio,凭借其卓越的功能和广泛的适用范围,成为了众多程序员的常用工具。不过,在实际操作期间,用户可能会遭遇各种挑战,其中一种较为普遍的挑战是“Visual Studio遭遇了异常情况,这或许与某个附加组件有关”。本文将详细研究这一现象的成因、潜在后果以及最终的应对措施。 ### 原因剖析 Visual Studio通过支持多种插件和附加组件来扩展其功能,这些组件通常由第三方开发者设计,旨在为用户提供更多个性化和专业化的工具。然而,这些插件的质量良莠不齐,部可能未经过充的测试或与特定版本的Visual Studio存在兼容性难题,从而在执行时引发异常。异常的出现可能源于以下几个因素: 1. **代码缺陷**:若附加组件中的代码存在逻辑问题或资源管理不当,就可能导致运行时异常。 2. **资源竞争**:多个插件同时占用相同的资源(例如内存、文件句柄等),可能会产生资源冲突,进而触发异常。 3. **依赖不匹配**:插件可能需要特定版本的库或框架,如果系统中安装的版本不一致,也可能导致异常。 4. **安全隐患**:部插件可能存在安全漏洞,一旦被恶意利用,可能会导致更严重的问题,包括但不限于异常崩溃。 ### 后果析 当Visual Studio遇到由附加组件引发的异常时,不仅会中断当前的工作进程,降低开发效能,还可能带来以下潜在风险: 1. **数据遗失**:若异常发生在保存操作之前,可能会导致未保存的工作内容遗失。 2. **稳定性减弱**:频繁的异常会导致Visual Stud...

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧