大家好,我用VS2008编写的C语言程序,在访问SQLSERVER数据的时候,sqlconnect()函数的返回值为-1。不知道什么原因。
我ODBC的数据源配置没有问题,测试是对的。下面是我的 程序,请帮忙指导下问题出在哪。谢谢。
我的ODBC数据源的配置是:用户DSN(系统DSN也试过,同样不行),数据源名称为LocalServer,描述为空,服务器为127.0.0.1(为本机,远程的也试过,不行),其他默认。
不知道问题在哪。
谢谢了。// compile with: odbc32.lib
#include <stdio.h>
#include <windows.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>void sqlConnect();int main()
{
sqlConnect();
getchar();
return 0;
}void sqlConnect()
{
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLRETURN retcode;
UCHAR sql1[79]="select * from tbl_saleinfo where saleinfo_ticketid = 101988902";
UCHAR   szDSN[15] = "LocalServer"; 
UCHAR userID[6] = "sa";
UCHAR passWORD[10] = "123456"; /*UCHAR   szDSN[15] = "HOST"; 
UCHAR userID[6] = "demo";
UCHAR passWORD[10] = "demo";*/
// Allocate environment handle
retcode=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
if(retcode==SQL_SUCCESS || retcode==SQL_SUCCESS_WITH_INFO)
{
printf("i am here1.\n");
// Set the ODBC version environment attribute
retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);

if(retcode==SQL_SUCCESS || retcode==SQL_SUCCESS_WITH_INFO)
{
printf("i am here2.\n");
// Allocate connection handle 创建连接句柄,下面两个方法好像都可以
retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
//retcode = SQLAllocConnect(henv,&hdbc); if(retcode==SQL_SUCCESS || retcode==SQL_SUCCESS_WITH_INFO)
{
printf("i am here3.\n");
// Set login timeout to 5 seconds
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0); // Connect to data source
retcode=SQLConnect(hdbc, (SQLCHAR*)"LocalServer", SQL_NTS,(SQLCHAR*)"sa", SQL_NTS,(SQLCHAR*)"123456", SQL_NTS);

if((retcode==SQL_SUCCESS) || (retcode==SQL_SUCCESS_WITH_INFO))
{
printf("i am here4.\n"); retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
if(retcode==SQL_SUCCESS || retcode==SQL_SUCCESS_WITH_INFO)
{

//绑定参数方式
char a[20]="Jim";
SQLINTEGER p=SQL_NTS;
char list[5]; printf("i am here5.\n");
//1.预编译
SQLPrepare(hstmt,sql1,79);//第三个参数与数组大小相同,而不是数据库列相同
//2.绑定参数值
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);
SQLExecute(hstmt);
printf("connection is OK\n");
//SQLExecDirect(hstmt,sql1,79);

SQLBindCol(hstmt,1,SQL_C_CHAR,list,5,0);
SQLFetch(hstmt);
printf("%s\n",list);
}
SQLDisconnect(hdbc);
}
else 
printf("failed:\n"); 
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
}
}
}
}我手上的分数不多了,抱歉。