#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;int main()
{
RETCODE retcode;
UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "PC-201007032132",
szUID[MAXNAME] = "sa",
szAuthStr[MAXNAME] = "123456";
UCHAR sql[38] = "insert into test values('aaa', '100')";
UCHAR pre_sql[30] = "insert into test values(?, ?)";
retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
        printf("分配环境句柄成功!\n");
    }
    else
    {
        printf("分配环境句柄失败,程序跳出,断点...1...?\n");
        return 0;
    } retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
        printf("设置连接属性成功!\n");
    }
    else
    {
        printf("设置连接属性失败,程序跳出,断点...2...?\n");
        return 0;
    } //
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
        printf("分配连接句柄成功!\n");
    }
    else
    {
        printf("分配连接句柄失败,程序跳出,断点...3...?\n");
        return 0;
    }
retcode = SQLConnect(hdbc1, szDSN, SQL_NTS, szUID, SQL_NTS, szAuthStr, SQL_NTS);
if((retcode != SQL_SUCCESS) || (retcode != SQL_SUCCESS_WITH_INFO))
{
printf("连接失败!\n");
else
{
//SQLGetDiagRec()
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
char a[200] = "bbb";
char b[200] = "200";
SQLINTEGER p = SQL_NTS;
SQLPrepare(hstmt1, pre_sql, 29);
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 200, 0, &a, 0, &p);
SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 200, 0, &b, 0, &p); SQLExecute(hstmt1);
printf("操作成功!\n");
SQLCloseCursor(hstmt1);
SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
} SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}不知道为什么,总是连接失败,几天后要去面试,上机要用,找工作难,拜托大侠们

解决方案 »

  1.   

    retcode = SQLConnect(hdbc1, szDSN, SQL_NTS, szUID, SQL_NTS, szAuthStr, SQL_NTS);
    给出SQLConnect()这个方法的源代码看看。相关的参数和数据库连接等信息有没有问题?
      

  2.   

    才看到。
    其实只是 retcode = SQLConnect(hdbc1, szDSN, SQL_NTS, szUID, SQL_NTS, szAuthStr, SQL_NTS);
     if((retcode != SQL_SUCCESS) || (retcode != SQL_SUCCESS_WITH_INFO))
     {
     printf("连接失败!\n");
     } //这里本来少了个},导致不匹配
     else
     {