我用ODBC的sqlconnect连接MS SQL SERVER失败
大家好,我用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);
}
}
}
}
我手上的分数不多了,抱歉。
我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);
}
}
}
}
我手上的分数不多了,抱歉。
...全文
相关推荐
INTOUCH_连接数据库
INTOUCH_连接数据库
C语言与SQLSERVER.docx
SQLSERVER2012版本数据库资源、NAVICATpremium资源下载,ssdt、jdk等依赖项。包括安装过程问题解决说明文档、ODBC配置说明等。
力控组态软件接入Access数据库:从ODBC配置到历史数据存储实践
在工业自动化与组态软件开发中,历史数据的采集与存储是监控系统稳定运行的基石。工控现场常通过Modbus TCP等协议将设备数据汇聚至组态软件,再由软件写入本地数据库,形成可追溯的趋势分析与报表数据。组态软件与数据库之间的连接,通常依赖ODBC数据源与驱动引擎,这一环节也是工程师最容易遇到故障的瓶颈。系统位数不匹配、数据源命名不一致、SQL语句语法差异等,都可能导致数据写入失败或查询异常。掌握ODBC驱动选型、DSN配置、SQL建表与插入操作,以及连接掉线后的自动重连技巧,是保障历史数据完整性的关键技术能力。
29Linux基础命令详解——用户管理.docx
29Linux基础命令详解——用户管理
科技服务机构如何通过数据分析增强服务竞争力?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。


