nuaalwz 2016-06-17 01:32 采纳率: 0%
浏览 1183
已结题

求助,VS下用ODBC链接不上oracle数据库

初学数据库,SQLConnect调用总是出错,查了一下发现一个跟我类似情况的
文章链接:http://bbs.csdn.net/topics/390017214,但是题主也没说解决了没有,我按照评论里说的做了可是还是出错。数据源也配置且测试成功,数据库用的oracle12g。
代码如下:

 #include<stdlib.h>
#include<stdio.h>
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<Sqltypes.h>
//using System.Data.Sqlclient
/*#include<odbcinst.h >
#include <odbcss.h>
#pragma comment(lib,"odbc32.lib")*/
#define SNO_LEN 30
#define NAME_LEN 50
#define DEPART_LEN 100
#define SGENDER_LEN 5
int main(){
    SQLHENV oraclehenv;
    SQLHDBC oraclehdbc;
    SQLHSTMT oraclehstmt;
    SQLRETURN ret;
    SQLCHAR sName[NAME_LEN], sDepart[DEPART_LEN], sGender[SGENDER_LEN], sSno[SNO_LEN];
    //SQLCHAR oracleName[] = "Oracle", stmt[] = "INSERT INTO STUDENT (SNO,SNAME,SSEX,SAGE,SDEPT)VALUES(?,?,?,?,?)";
    SQLINTEGER sAge;
    SQLINTEGER cbAge = 0, cbSno = SQL_NTS, cbGender = SQL_NTS, cbName = SQL_NTS, cbDepart = SQL_NTS;
    /*初始化环境*/
    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &oraclehenv);
    ret = SQLSetEnvAttr(oraclehenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
    /*建立连接*/
    ret = SQLAllocHandle(SQL_HANDLE_DBC, oraclehenv, &oraclehdbc);
    ret = SQLConnect(oraclehdbc, (SQLCHAR*)"Oracle", SQL_NTS, (SQLCHAR*)"c##admin", SQL_NTS, (SQLCHAR*)"admin", SQL_NTS);
    if (!SQL_SUCCEEDED(ret))
    {
        printf("数据库连接失败!\n");
        system("pause");
        return -1;
    }
    /*初始化语句句柄*/
    ret = SQLAllocHandle(SQL_HANDLE_STMT, oraclehdbc, &oraclehstmt);

    ret = SQLExecDirect(oraclehstmt, (SQLCHAR*)"SELCET * FROM STUDENT", SQL_NTS);
    if (ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)
    {
        ret = SQLBindCol(oraclehstmt, 1, SQL_C_CHAR, sSno, SNO_LEN, &cbSno);
        ret = SQLBindCol(oraclehstmt, 2, SQL_C_CHAR, sName, NAME_LEN, &cbName);
        ret = SQLBindCol(oraclehstmt, 3, SQL_C_CHAR, sGender, SGENDER_LEN, &cbGender);
        ret = SQLBindCol(oraclehstmt, 4, SQL_C_LONG, &sAge, 0, &cbAge);
        ret = SQLBindCol(oraclehstmt, 5, SQL_C_CHAR, sDepart, DEPART_LEN, &cbDepart);
        //printf("%s,%s,%s,%d,%s\n", cbSno, cbName, cbGender, cbAge, cbDepart);
    }
    while ((ret = SQLFetch(oraclehstmt)) != SQL_NO_DATA_FOUND)
    {
        if (ret == SQL_ERROR)
            printf("Fetch error\n");
        else
            printf("%s,%s,%s,%d,%s\n", cbSno, cbName, cbGender, cbAge, cbDepart);
    }
    SQLFreeHandle(SQL_HANDLE_STMT, oraclehstmt);
    SQLDisconnect(oraclehdbc);
    SQLFreeHandle(SQL_HANDLE_DBC, oraclehdbc);
    SQLFreeHandle(SQL_HANDLE_STMT, oraclehenv);
    system("pause");
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 关注

    WSW中文分词解决方案 http://www.fly-software.com:84/

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮