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

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

编辑:说三道四文库 发布时间:2017-03-29 07:46
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.*的版本应该是不影响使用的,只是和数据库的具体存储方式有关。
就这样结贴了,分数就大家均分好了。
用DEPHI 3.0实现动画ABOUT窗口-Delphi资料 用鼠标拖动无标题窗口-Delphi资料 在Delphi编程中创建一个启动闪现窗口 在form中想用enter来代替tab,请问如何实现?-Delphi资料 在Listboxes中加背景图-Delphi资料 在Window右下角的添加图标-Delphi资料 在程序中使用自定义的鼠标-Delphi资料 怎样建立简单的任务栏应用程序-Delphi资料 增强DelphiTStatusBar控制 制作Delphi的竖排标签 自适应表单的实现-Delphi资料 COM/DCOM的区别与联系-Delphi资料 CoolBar上控件的排列顺序-Delphi资料 Delphi 4 WebBroker Delphi 中自做动态显示的控件 Delphi3的DBGrid中的下拉列表和查找字段编程方法 DELPHI常见问题 Delphi的竖排标签 DELPHI构件制作方法 DELPHI控件Tweblabel的编制 DELPHI中MEMO组件的光标定位 Delphi中RichEdit的奥妙 Delphi中TApplication类 Delphi中日期时间输入的简洁方法 delphi中怎么调用interbase数据库? Memo的Undo功能-Delphi资料 RECT在Delphi中的灵活使用 StringGrid制作只读列-Delphi资料 TADOQuery下主明细表其属性关系如何设置,如何保存主表和明细表?-Delphi资料 TBatchMove用法-Delphi资料 TMemo的真正插入字符-Delphi资料 大家谁作过数据导入导出的程序阿,能不能给点指点阿!急!!!! 新手求救:如何发布一个用JAVA/JSP/SQL SERVER开发的系统!!! SQL里update的使用问题 今天辞职,散分散分散分! 我form中一select中的option被选中,在提交后,如何用javascript来保存选中的那个option 怎样调用约定为CDECL的DLL? 弹出菜单的位置问题,简单,快进 LINUX下的虚拟主机的问题 用过网上的G711-G721-G723代码做语音压缩的请进,高分 在98上安装了apache+php+mysql,让用287端口测试,287端口是什么 字体设置, LogFont的lfFaceName... 关于随机 新手问题 如何动态改变 RichEdit 中的字体?很急! !!!怎样把stringgrid中已经选择得数据读出来!!!! 我该学些什么? CObject类是MFC类吗? 请问除了http://java.sun.com/j2se/1.4/download.html外,哪里还有jdk1.4下载? 有没有兄弟做过关于DSP与PC的并行通信? 请教接口查询的问题 如何清空表中的全部记录? 我是一个vb 的初学者,请大家介绍一两本好的关于数据库开发的书! 《Delphi淡手辑略 之 数据库篇》:数据安全保存(函数) DB2 store procedure Easy_Problem!!!关于对话框!!! weblogic下调用java bean出了点问题 (苯苯) 如何在两地用netmeeting通信,共享信息,两方为win98和win2000server,使用modem连接 tomcat 如何与 jboss 进行集成 Regular DLL中向导生成的winapp对象有什么用? 关于Install shield 的问题 一个高难度问题,特急! 从一个页的Button事件中如何获取在iframe中另一页中选种checkbox的值? 大家一起来帮帮我 我是个新手请教如何在98下安装和设置apache,尽是详细些,最好给介绍些资料 高手请教,有关类的链表指针 如何定义日期类型? 请教高手!如何执行带条件SQL语句? 大家一起来为c#加油阿 追女教训谈 如何用OUTLOOK作多用户使用???? 赐教 有谁知道ramdrive.sys在dos下的详细用法,敬请赐教,倍感感激!! 怎么用Delphi调用MySql(win) 关于frame的问题. 为什么显示不出来???? c#通过INTERNET远程访问数据库都有什么办法?(请高手指点) 有誰能把CDONTS.DLL(電子郵件)的源代碼貼出來嗎?有分送,THANK! 请教 NetColorWolf(NCW) pb7的工具条栏的文字字体! 为什么,我的子窗口调用另一个窗口时,总是新开一个被调用窗口,而且被调用窗口中的ADOTable的connected总是丢失。why 《Delphi淡手辑略 之 数据库篇》:数据安全删除(函数) 请教! 我用setfocus使一个控件聚焦,但我想隐藏光标,不想让它在界面上闪动,怎么办? 用方程解,是天才的快来帮我 病毒,主要的生物致癌因素有哪些? 英语翻译Put your basic compensation policies in writing before making decisions about anyon’s pay.Even if your agency employs only a handful of people,it is important to think about the role you want money to play in attracting and retaining th 瓷片电容的读法.如瓷片电容电标有104,其容量是多少.还有1F=-uF=-pF=-nF? 引起癌细胞病变的因素有哪些? 英语翻译Although he never finished elementary school,the bearded,former lathe operator and leftist leader has skillfully managed the country’s economy,setting aside his old populist rhetoric to adhere to prudent,conservative fiscal and monetary 瓷片电容103什么意思手头有块板子,上面的瓷片电容上面就只有103这个标注,还有一种是标注104的.请问下,上面的 103 104 ①在适宜条件下,癌细胞能够,. ②癌细胞的,发生显著变化. ③癌细胞的,发生了变化,细胞膜上的,等物质减少,使得癌细胞彼此之间的,显著降低,容易在体内分散和转移 英语翻译还有要说的就是薛宝钗的爱情悲剧了.看到黛玉因为非常抑郁而死了,她依然非常难过.可等到读完红楼梦后,我突然伤感了.薛宝钗这样的人物,也要像李纨一样,将自己的一生都浪费在这 0-2s间到底是几秒?这些文字问题有归纳吗? 朝花夕拾全面人物分析 已知等差数列{an}的公差为1,且a1+a2+a3+…+a100=5050求{an}通项公式,求 a2+a4+a6+…+a100的值 朝花夕拾 赏析 在公式s=vt+1/2at²中s,t(t不等于0),v则a=() 第3题选什么?高中物理题 《赤壁赋》的翻译. 对朝花夕拾中一个人物的赏析要一个明确的人物,答的好我加分 4、如图所示,玻璃管中封闭有一段气体,当玻璃管向下自由下落时,管中空气柱长度( B )A、增大,B、减少,C、不变,D、无法确定 朝花夕拾赏析 谁有 朝花夕拾 和 钢铁是怎样炼成的 文段或人物性格赏析 高中物理3-5重要么感觉不想学那些 《朝花夕拾》的赏析 对于朝花夕拾中的人物评价400字最好是关于阿长的评价 照样子写几个和下面词语意思相近的词例:走——逛.溜达.散步.踱步看——说—— 已知等差数列{An}中,A1=1,An=A(n+1)+2 (n≥1),则A100为多少? 朝花夕拾人物赏析2段 照样子写词语 摇晃 和温暖还有什么组词 这个电容上的数字表示的含义?54 47 6A这个电容上写了这三组数字都代表了什么 引起细胞癌变的致癌因子有哪三类 霉菌都是对人体不利的吗,如黄曲霉还可能致癌对吗? 瓷片电容上写着: 等差数列中,a1+a2+.+a50=200,a51+a52+.+a100=2700,a1等于A-1221 B-21.5 C-20.5 D-20 黄曲霉产生的什么物质会对人体致癌 瓷片电容上就一个数字应该怎样读? 细胞癌变的致癌因子 《朝花夕拾》主要内容100字只需要100字的主要内容就够了,不要超出,要<100 瓷片电容上写了个300是什么意思? 在等差数列{An}中,a1+a2+……+a50=200,a51+a52+……+a100=2700,求a1和d,要详细过程 求《朝花夕拾》的主要内容,100字以内. 朝花夕拾的赏析 致癌因子一定会导致细胞癌变么 朝花夕拾主要故事情节100字以内 在等差数列{an}中,a1+ a2+ .+a50=200,a51+a52+.+a100=2700则a1为在等差数列中,a1+ a2+ a3.+a50=200,a51+a52+.a100=2700,则a1为 致癌因子为什么会导致细胞的癌变? 朝花夕拾主要内容及感想分章100字左右 等差数列an中,a1+a2+.+a50=200,a51+a52+...+a100=2700,则a1的值为? 细胞的癌变,致癌因子 《朝花夕拾》的主要内容 200字以内 急用 在等差数列{an}中 a1+a2+.+a50=200 a51+a52+...+a100=2700 求a1 朝花夕拾 每篇的赏析 英语快,好评(⊙o⊙)哦. “顾颉刚”三字咋读啊? 已知{an}是等差数列,a1+a2+.+a50=200,a51+a52+.+a100=2700,则a1等于多少. 谁有《朝花夕拾》的名段赏析?要求格式为:段落-------------------------------------------------(不少于二百字)评析---------------------------------------(不少于一百字)多谢! 阅读笔记和读书笔记有什么不同 病毒致癌因子是什么?是不是说:没有某种病毒可以直接导致癌症,而是由这中病毒引发的疾病最终导致癌症,所以这些能够间接引发癌症的病毒被称为病毒致癌因子? 英语翻译Supplier shall not be,nor in any way represent itself as,an agent of JCI and shall have no authority to enter into any obligation on behalf of JCI or to bind JCI in any way 顾颉刚 怎么读 病毒致癌因子有什么举例 英语翻译Few things upset you more than knowing certain of your objectives could undermine other people.if you can,do something about it.That is,get in touch with the individuals in question.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘