我用ODBC的sqlconnect连接MS SQL SERVER失败

demoxie1 demoxie1 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好,我用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);
}
}
}
}

我手上的分数不多了,抱歉。
...全文

相关推荐

INTOUCH_连接数据库

INTOUCH_连接数据库

aaaa___1111

C语言与SQLSERVER.docx

SQLSERVER2012版本数据库资源、NAVICATpremium资源下载,ssdt、jdk等依赖项。包括安装过程问题解决说明文档、ODBC配置说明等。

supersohey

力控组态软件接入Access数据库:从ODBC配置到历史数据存储实践

在工业自动化与组态软件开发中,历史数据的采集与存储是监控系统稳定运行的基石。工控现场常通过Modbus TCP等协议将设备数据汇聚至组态软件,再由软件写入本地数据库,形成可追溯的趋势分析与报表数据。组态软件与数据库之间的连接,通常依赖ODBC数据源与驱动引擎,这一环节也是工程师最容易遇到故障的瓶颈。系统位数不匹配、数据源命名不一致、SQL语句语法差异等,都可能导致数据写入失败或查询异常。掌握ODBC驱动选型、DSN配置、SQL建表与插入操作,以及连接掉线后的自动重连技巧,是保障历史数据完整性的关键技术能力。

菩提风

29Linux基础命令详解——用户管理.docx

29Linux基础命令详解——用户管理

云计算练习生

科技服务机构如何通过数据分析增强服务竞争力?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN
评论 19
收藏 已收藏
分享
返回顶部
demoxie1
C语言 70,039 成员 243,237 内容