免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7210 | 回复: 10
打印 上一主题 下一主题

ODBC API调用存储过程一个问题? [复制链接]

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-06 16:05 |只看该作者 |倒序浏览
下面是一个存储过程。通过ODBC API调用该存储过程。

create procedure MeterFactorySave_p  
  @render varchar (64) output ,
  @meterFactoryCode varchar(3),  
  @meterFactoryName varchar (64)  
as
  declare @meterCode varchar(3)
begin
  select @meterCode=count(*) from madeMeterFactory_t where factoryCode=@meterFactoryCode and isvalid='1'
  if @meterCode>0
  begin
set @render='该编码已经存在'
  end
  else
  begin
insert into madeMeterFactory_t(factoryCode,factoryName,dates) values(@meterFactoryCode,@meterFactoryName,convert(varchar(32),getDate(),120))
set @render='保存成功!'
end

  return 1024
end

问题是不能返回红体中的变量值@render,如果将红体中的插入语句注释掉,那么就可以返回变量 @render的值,请问是怎么回事?

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
2 [报告]
发表于 2010-07-06 16:05 |只看该作者
调用存储过程的函数如下:
saveMeterFactory_p(char *meterFactoryCode,char* meterFactoryName)
{
char sql[100];
  SQLCHAR szOutput[64];
SQLINTEGER cb1=SQL_NTS, cb2=SQL_NTS, cb3=SQL_NTS, cb4=SQL_NTS;
SQLINTEGER iReturnVal=0;
memset(szOutput,0,64);
memset(sql,0,100);
sprintf(sql,"{?=call MeterFactorySave_p(?,?,?)}");

SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); //分配环境句柄
  SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); //设置驱动程序属性(版本等)
  SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); //分配连接句柄
  retcode = SQLDriverConnect(hdbc,NULL,ConnStr,SQL_NTS,ConnStrOut, sizeof(ConnStrOut),&ConnStrOutLen,SQL_DRIVER_NOPROMPT);
//函数SQLDriveConnect用一个连接字符串建立至数据源的连接。
  retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); //初始化语句句柄
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &iReturnVal, 0, &cb1);
retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_OUTPUT, SQL_C_CHAR,SQL_VARCHAR, 64, 0, szOutput, 64, &cb2);
retcode = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_VARCHAR, 4, 0, meterFactoryCode, 3, &cb3);
retcode = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_VARCHAR, 32, 0, meterFactoryName, 32, &cb4);
  retcode = SQLExecDirect (hstmt,(SQLCHAR *)sql, SQL_NTS);
   
MessageBox(NULL,szOutput,MessBoxCap,MB_ICONWARNING);

}

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
3 [报告]
发表于 2010-07-06 16:21 |只看该作者
insert 成功了? 或者是不是数据库 ODBC 驱动有问题?
没看出毛病来, 话说到现在还有使用 ODBC API 的公司啊。

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
4 [报告]
发表于 2010-07-06 16:37 |只看该作者
insert 成功了? 或者是不是数据库 ODBC 驱动有问题?
没看出毛病来, 话说到现在还有使用 ODBC API 的公 ...
zylthinking 发表于 2010-07-06 16:21


我就是学习学习。

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
5 [报告]
发表于 2010-07-06 16:40 |只看该作者
insert 成功了? 或者是不是数据库 ODBC 驱动有问题?
没看出毛病来, 话说到现在还有使用 ODBC API 的公 ...
zylthinking 发表于 2010-07-06 16:21



    驱动没有问题的。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
6 [报告]
发表于 2010-07-06 16:50 |只看该作者
我5年多不玩sql了, 不一定能有帮助啊, 不过我不记得存储过程能够使用 return啊, 我看你的语法, 似乎是 sql server吧

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
7 [报告]
发表于 2010-07-06 16:55 |只看该作者
我5年多不玩sql了, 不一定能有帮助啊, 不过我不记得存储过程能够使用 return啊, 我看你的语法, 似乎是  ...
zylthinking 发表于 2010-07-06 16:50

是sql server.

论坛徽章:
0
8 [报告]
发表于 2010-07-06 17:06 |只看该作者
1,看insert语句有没问题
2,加入 set nocount on 语句试试

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
9 [报告]
发表于 2010-07-06 17:09 |只看该作者
1,看insert语句有没问题
2,加入 set nocount on 语句试试
梦星月 发表于 2010-07-06 17:06



insert没有问题。
添加了set nocount on还是没有返回字符串。

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
10 [报告]
发表于 2010-07-06 17:12 |只看该作者
当插入数据表中已有的编码时,执行存储过程返回"该编码已经存在"字符串。
当插入数据表中没有的编码时,执行存储过程返回空字符(按照要求应该返回"保存成功!"字符串)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP