说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

ODBC调用sql server 2005 存储过程出错,请大家帮忙看下,给点意见,谢谢。在线等。

编辑:说三道四文库 发布时间:2017-02-22 04:39
HTML文档下载 WORD文档下载 PDF文档下载
通过odbc调用sql server 2005的存储过程,执行一直失败,错误信息:[Microsoft][SQL Native Client]无效的参数类型,S1105, 大家帮忙看看是什么问题。 

代码如下: 

    RETCODE            ret; 
    SQLINTEGER          char_type_input_code = SQL_NTS; 
    SQLINTEGER          cbEnv                = 0; 
    SQLINTEGER          cbCause; 
    
    S32                dwNodeID = 0; 
    S8                  szName[256]; 
    
    S32                iErrCode            = ROK; 

    strcpy(szName, "root"); 

        ret = SQLPrepare(p_stTdatxt->hstmt,(SQLCHAR*) "{?=call p_add_node(?,?)}", SQL_NTS); 

ret = SQLBindParameter(p_stTdatxt->hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, 
            SQL_INTEGER, 0, 0, &dwNodeID, 0, &cbEnv); 

        
ret = SQLBindParameter(p_stTdatxt->hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, 
            SQL_CHAR, TDA_NAME_STANDARD_LENGTH, 0, &>szName, 0, &char_type_input_code); 

//前面的一直是正确执行的。 
//一直到这里执行语句的时候出错。 
        ret = SQLExecute(p_stTdatxt->hstmt); 

        执行结果一直是-1,odbc里面的错误消息提示:[Microsoft][SQL Native Client]无效的参数类型,S1105 

存储过程如下: 

      ALTER PROCEDURE [dbo].[p_add_node] 

@NODE_PID Int, 
@NODE_NAME Varchar(256) 

AS 
INSERT INTO t_testsuit_catalog_treenode 

node_pid, 
node_name 

VALUES 

@NODE_PID, 
@NODE_NAME 
)
第二个参数类型是SQL_VARCHAR,不是SQL_CHAR
UP
引用 1 楼 hhyttppd 的回复:
第二个参数类型是SQL_VARCHAR,不是SQL_CHAR


吼吼
引用楼主 magicianchar 的帖子:
通过odbc调用sql server 2005的存储过程,执行一直失败,错误信息:[Microsoft][SQL Native Client]无效的参数类型,S1105, 大家帮忙看看是什么问题。 

代码如下: 

    RETCODE            ret; 
    SQLINTEGER          char_type_input_code = SQL_NTS; 
    SQLINTEGER          cbEnv                = 0; 
    SQLINTEGER          cbCause; 
    
    S32                dwNodeID = 0; 
    S8             …

参数类型写错了 SQL_VARCHAR不是SQL_CHAR 给LZ一个详细点的连SQL方法

int MiMSSqlODBCConnect(const char *pInstName, const char *pUser,
                       const char *pPWD, SQLHENV &henv, SQLHDBC &hdbc)
{
    SQLRETURN   hRecode;
    char        szConnOption[1024];
    SQLCHAR     szConnStrOut[1024];    
    SQLSMALLINT cbConnStrOut = 0;
    int         nRet = WAVETOP_BACKUP_OK;
    
    /* Allocate environment handle */
    hRecode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);    
    if (hRecode != SQL_SUCCESS && hRecode != SQL_SUCCESS_WITH_INFO) {
        SLogErrorWrite(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, NULL,
            "MiMSSqlConnect: SQLAllocHandle failed");
        nRet = WAVETOP_BACKUP_INVALID_SYNTAX;
        goto CLEANUP;
    }
    
    /* Set the ODBC version environment attribute */
    hRecode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);        
    if (hRecode != SQL_SUCCESS &&
        hRecode != SQL_SUCCESS_WITH_INFO) {
        SLogErrorWrite(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, NULL,
            "MiMSSqlConnect: SQLSetEnvAttr failed");
        nRet = WAVETOP_BACKUP_INVALID_SYNTAX;
        goto CLEANUP;
    }
    
    /* Allocate connection handle */
    hRecode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);    
    if (hRecode != SQL_SUCCESS && hRecode != SQL_SUCCESS_WITH_INFO) {
        SLogErrorWrite(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, NULL,
            "MiMSSqlConnect: SQLAllocHandle failed");
        nRet = WAVETOP_BACKUP_INVALID_SYNTAX;
        goto CLEANUP;
    }
    
    /* Set login timeout to 3 seconds. */
    SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)3, 0);
    
    /* connect string */
    if (stricmp(pInstName, "MSSQLServer") == 0) {      
        _snprintf(szConnOption, sizeof(szConnOption), "DRIVER={SQL Server};"
            "server=%s;uid=%s;pwd=%s", 
            g_MiGlobalConf.szHostIP, pUser, pPWD);
    }
    else {
        _snprintf(szConnOption, sizeof(szConnOption), "DRIVER={SQL Server};"
            "server=%s\\%s;uid=%s;pwd=%s", 
            g_MiGlobalConf.szHostIP, pInstName, pUser, pPWD);
    }
    
    /* Connect to data source */
    hRecode = SQLDriverConnect(hdbc, 
        NULL,
        (unsigned char *)szConnOption,
        SQL_NTS,
        szConnStrOut,
        sizeof(szConnStrOut),
        &cbConnStrOut,
        SQL_DRIVER_NOPROMPT);
    
    if (hRecode != SQL_SUCCESS && hRecode != SQL_SUCCESS_WITH_INFO) {
        SLogErrorWrite(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, NULL,
            "MiMSSqlConnect: SQLDriverConnect failed");
        nRet = WAVETOP_BACKUP_INVALID_SYNTAX;
        goto CLEANUP;
    }    
    
    return nRet;
    
CLEANUP: 
    MiMSSqlODBCClear(henv, hdbc);
    return nRet;
}

void MiMSSqlODBCClear(SQLHENV &henv, SQLHDBC &hdbc)
{
    if (hdbc != SQL_NULL_HDBC) {
        SQLDisconnect(hdbc);
        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
        hdbc = SQL_NULL_HDBC;
    }
    if (henv != SQL_NULL_HENV) {
        SQLFreeHandle(SQL_HANDLE_ENV, henv);
        henv = SQL_NULL_HENV;
    }
}
恩,sql_varchar和sql_char都是通用的。
错误的原因是因为调用存储过程的时候前面多了一个“?”。

引用 1 楼 hhyttppd 的回复:
第二个参数类型是SQL_VARCHAR,不是SQL_CHAR


在odbc 3.*的版本应该是不影响使用的,只是和数据库的具体存储方式有关。
就这样结贴了,分数就大家均分好了。
微软发布Office 365家庭高级版 订阅费499元/年 鲍尔默对Office信心满满,十亿用户量触手可及 【多图】梦幻现实 IBM的未来超级计算机水世界 一名骨灰级工程师的OpenStack部署总结引发的讨论 解读DuckDuckGo搜索 百万点击也敢叫板Google 开发者成功学:扔掉你那些很sexy的想法 VMware严控ESXi API 引发用户和ISV被绑架担忧 布局O2O Facebook推出实物礼品卡 iSuppli:微软Surface RT实际销量远低于出货量 业界前三甲:App Store两个刷榜者,站了出来 极客无极限 一行HTML5代码引发的创意大爆炸 将服务器“弃”之荒野? 微软玩转露天数据中心 Dropbox:我们现在关注“内容” 而不仅仅是文件存储 访Teradata Aster Mayank Bawa:抛弃无效数据,让分析走向大众化 谷歌Chrome或新增通知中心 与Google Now整合 传言称HBO节目将登陆苹果Apple TV? Crashlytics被收购,应用崩溃报告服务要火了? 微软公布WP7.8完整功能 诺基亚率先升级 BlackBerry 10或许不仅仅是一剂强心针 一周消息树:专访蒋彪:JavaEE是企业级开发首选 移动周报:从封闭到开放,iOS生态系统要变天? 游戏平台上:Win7已跌破70% Ubuntu突破1% 不再那么传奇 扎克伯格时代或结束 微软应该联手Firefox OS,打造破坏性生态系统 中美IT人才俱乐部第一期:硅谷经验面面观 中国第四季度Android和iOS智能手机出货量高达98% 开发者眼中的代码审查“真相” 互联网产品设计的12个理念 Pair、Between、小恩爱:妹纸装个情侣应用吧? 横跨四大操作系统:3DMark将挑战所有智能设备 美国碰壁欧洲得意 华为获CERN青睐 我是新来的,请各位大哥、大姐们多多关照!!!(有内容) 再次发问关于sql server7的问题?? SQL SERVER中的一个触发器的问题!!! xml里有什么method可以取得子节点在父节点中的位置(序号)? please help me 怎么样才可以把系统存储过程的结果写到结果集里? 如何声明和使用自定义对象(如:Tdataset)的事件(beforecancel)?? 一个奇怪的问题? 各位兄弟,谁知道哪里有pb7的下载? 天呐 我提的问题从来没人回答 SQL Server小小问题 请问那里有DELPHI第二张光盘下载! 如何是使用describe来获取datawindow中的带区参数? 谁有早期的TeeChart5.ocx,文件大小为2,576,384,发行日期在2001-06-17号以前的,我这里有个crack软件,但是新下载的不行,所以重金寻求!!! 请问C语言中有字符串查找函数吗? 请问如何动态的改变应用程序的图标,一定给分 Query主从表编辑问题,从不丢失! 急急急!!!! 高分求禁止IE的自动谈出的广告,有个软见也行,或者告诉实现方法。请告诉下载的网址。 打印一些清单在delphi中用哪些控件比较好? 如何打印到文件 如何得到WINDOWS的拼音字库 如何在BCB中进行SDK编程? 一个简单关于对话框的问题------->> 用asp将图片插入数据库,到底错在哪?苦恼啊!以前这个也通过了(win2000server+Sql7.0)但...(高分!!!!) 为什么我在Access2000的mdb中只能最多得到一条记录? 男人25岁就大吗? 关于 C 类IP的屏蔽 配置为COM+组件后,CoCreateInstance 失败! 关于C 类 IP的屏蔽 有谁知道本.拉登的QQ,俺找他有事?重奖`~~~~~~~~~~~~~~~~~~~! 有没有人告诉我,HTTP头跟正文中间夹的什么? 请问asp和php能访问webservice吗??? 如何一打开NOTE客户端就执行我的数据库(不能设书签)? true dbgrid控件怎么使一个网格又下拉的列表弹出来 关于计数器的代码 那里有含有K线图的图表控件和像OFFICE的工具栏控件下载? 十万火急!如何在Dialog上显示Menu??(我只能给到27分了) 十万火急!如何在Dialog上显示Menu??(我只能给到27分了)十万火急! 问一下,笔记本上的软驱通用吗? maskedit的问题? delphi中报表的问题 关于常用的几种压缩编码? tomcat启动出错,请问什么原因? 一个小问题。回答就给分? 在JSP页面中,能否嵌入ActiveX控件 增加控件的成员变量对程序有什么影响?会使EXE变大吗? shr 是什么意思? 我想用delphi删除一文件夹下面的全部文件,我可以删除一条记录,但无法自动删除全部,数据,我该如何做??? 77分征收四个Delphi中buttons的bmp图标--顶张、下张、上张、末张! 有谁用C++Builder做过corba SQL Server编程求解!!!!! 用字母表示,长方体,正方体的表面积,体积,周长公式,圆柱体的体积,表面积公式,圆锥的体积公式,(正用和逆用公式都要)(全部用字母表示)急用, 1*2*3*4*5 221*2*3*4*5 22 十,一,X,÷ 用12345十一X÷最后等于22 花生是不是又称为长生果? 一种电视机商场按进价加价百分之三十五,然后按定价打9折出售,并且每台送“打的”费50元,这样每台可获利241.6元,每台进价多少? 一个长方体的表面积是84平方厘米,把它割成三个相等的正方体,每个正方体的表面积是( )平方厘米.(要算式) 书为什么会被人类称为“长生果”? 在一个长3dm、宽2dm的长方体里画一个最大的圆,这个圆的面积是( ).周长是( ).2.把一个圆平均分成若干个小扇形,再拼成一个近似的长方形,这个长方形的长是9.42dm,周长是24.84dm.这个圆的周 一个长方体的棱长之和是36厘米,已知道长是4厘米,宽是3厘米.求这个长方体的表面积.列式计算 沿圆柱的直径把圆柱切成两半后,截面是个正方形,表面积增加50平方分米,圆柱的表面积和体积 一种电视机,商场按进价加35%定价,然后按定价打九折出售,并且每台送“打的”费50元,这样每台仍可获利208元.这种电视机的进价是多少元?答案上说是1200元,只是不知道为什么这么做, 一个长方体的棱长的和是36厘米,它的长和宽都是2厘米,这个长方体的表面积是多少平方厘米?急,我有用 花生的英文名是什么? 半径是1dm的圆如果半径增加1dm周长增加()dm 一个长方体的长、宽、高分别是a米、b米、h米.如果高增加3米,新长方体的表面积增加多少平方米? 英语翻译做包装的英文 有赏 有一批货物第一次运走总数的1/5,第二次运走总数的1/4,运走的比剩下的少10吨这批货物有多少吨.文字讲解 某书店以“20元办会员享受8折优惠”的方式进行促销,你认为在什么情况下办会员卡消费合算? 史努比所在的书的英文名是什么?是叫花生还是叫Snoopy?我想买英文原版的, 一个长方体的长宽高分别为6cm、5cm、4cm,若把他切割成三个大小相同的小长方体,这三个小长方体的表面积的最大是多少?最小是多少? 一个长方体的长宽高分别是6米,5米,4米.如果高增加2米,新长方体的表面积比原来增加多少平方米? 有机花生是啥意思? 一批货物第一次运走1/5正好是第二次的2/3,还剩22吨,这批货有几吨 某书店以“20元办会员卡8折优惠”的方式进行促销,你认为在什么情况下办会员卡和算 一个圆柱,底面半径是3分米,侧面展开是正方形.这个圆柱的表面积是()平方厘米?体积是()立方厘米.把它截成2段,表面积增加了()平方厘米 一个长方体长10cm,宽8cm,高5cm,把它切成两块相同的长方体,这两个长方体的表面积和最大是多少平方厘米..最小是多少? 一桶油,第一次用去5分之2,第2次比第1次多2千克,桶里还剩下3千克.这桶油原来有多少千克? 一个圆柱的表面积比侧面积大12.56dm的平方,高是3dm,这个圆柱的体积是多少立方厘米? 转基因食品 到底哪里有害? 土豆,芋头这些淀粉类的吃多了会导致长胖啊? 一个长方体的棱长之和是36厘米,长、宽、高的比是5:3:1,这个长方体的表面积是( ),体积是( )谢谢了! 一个长方体的长是10cm,宽是8cm,高是5cm,把它切成两个长方体,这两个长方体的表面积之和最大是( )cm².要算式 用果实、茎和根给油莎果、南瓜、芋头、红薯、莲藕、萝卜、姜和土豆分类 一个长方体的长、宽、高的比是3:2:1,它的棱长总和是48厘米 ,求此长方体的表面积 一个长方体长10cm宽8cm高5cm,把它截成两块相同的长方体,表面积增加了()cm,最少增加()cm快 已知圆柱底的半径是3dm,高是10dm,求表面积 小客车每辆600元,限乘12人;大客车每辆1300元,限乘30人.共有师生73人,怎样租车最省钱?租金共多少元2门票问题太.信息;门票每人40元,团体票价格如下表.算一算:购票至少需多少元?人数30--50 51-- 一个长方体长10cm,宽8cm,高5cm,把它切成俩个长方体,这两个长方体的表面积和最大是多少平方厘米? 一个圆柱的高是10dm,底面积的半径是3dm,它的表面积是多少 一个圆柱底面直径是20分米,高是6分米,沿着底面直径把圆柱切成两半,这个圆柱的表面积增加了多少? 有两个长10CM、宽4CM、高5CM的长方体木块黏在一起,成为一个大的长方体.为了使这个长方体的表面积尽可能地小,想一想,该怎样粘?试求这个大长方体的表面积. 圆柱底面积半径3dm 求表面积? 落花生名字的由来 白薯,红薯,番薯,地瓜,洋芋,山芋,香芋,芋头,土豆的区别?几种吃的东西叫这么多名字, 一个长方体的棱之和是36厘米.已知长是4厘米,宽是3厘米.求这个长方体的表面积. 落花生的名字由来 一个长方体的棱长之和是84,它的长,宽,高的比是3比2比2,这个长方体的表面积是几平方厘米,体积是几立方分米 把一个长10dm,底面半径3dm的圆柱锯成四段小圆柱,表面积增加了多少 《落花生 》名字的来历 一个长方体的棱长之和是84厘米,它的长宽高的比是3:2:2,这个长方体的表面积是()平 一个长方体的棱长之和是36厘米.已知长是4厘米,宽是3厘米,求这个长方体的表面积急1 课文《落花生》名字由来五年级语文《落花生》名字的由来. 如果大圆的半径与小圆的直径相等,则大小两圆半径之比是(),周长之比是(),面积之比是(). 急! 一个圆柱的底面半径是3dm,高时4dm,这个圆柱的表面积是? 一个长方体的棱长和是36厘米,已知长是4厘米,宽是3厘米.求这个长方体的表面积.(快!) 一批货物,第一次运走它的4/1,第二次运走了一百吨两次共运走了这批货物的4/3这批货物有多少吨?x-(4/3x-4/1x)=1002/1x=100x=200 一个圆柱的底面周长是12.56dm高是3dm圆柱的表面积是多少 某书店以“50元办理会员卡,享受七五折优惠“,你认为在什么情况下办理会员卡消费合算 一批货物,第一次运走了1/5,第二次韵有了剩下的1/5,两次共运走了这批货物的多少,还剩下多少 番薯甘薯红薯白薯马铃薯土豆地瓜有什么区别和联系?拒接长篇大论啊...分分类就行了..... 某书吧的会员卡100元一张,会员的消费打八折,那么当消费达到多少元以上时买会员卡比较划算.A.100 B.300 C.500 D.600
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn