救命呀!救救我!执行sql语句问题!

xjunp 2004-05-06 11:00:00
帮忙呀,我建立的那个数据源是空的,我不知道如何找到我的数据源,!我用系统的数据源,连接上了,自己新建了表,可是执行sql语句不行,救命呀!
下面是俩天的工作结果,效率太低了,我不想第一份工作就在半月之后,走人呀!
救救我呀!谢谢谢谢!


// ConnectSQL.cpp : 定义控制台应用程序的入口点。
// description : 使用odbc api建立同数据源“*****”的连接
// 并查询简单信息!
// author : puppy peng
// Date : May 4-May 5,2004
// version : 1.1
// 1.0 实现了同数据源的连接
// compile : vs.net 2003
// modification history : 1. May 4,我象无头苍蝇一样,到处找资料,其实吗,
// 不知道自己要干吗?
// 2. May 4,晚,在家,终于明白自己要先想清楚思路
// 3. May 5,早,写出了思路
// 4. May 5,上午,开始编写,成功!:)


/*******************************************
// 新的需求: 构造和执行SQL语句,取回查询结果,
// ( 接受用户输入)
// 11.18 May 5,2004
*********************************************/

#include "stdafx.h"
#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 hdbc = SQL_NULL_HDBC;
SQLHSTMT hstmt = SQL_NULL_HSTMT;


int _tmain(int argc, _TCHAR* argv[])
{
RETCODE retcode;
SQLCHAR szName[MAXNAME+1];
SQLINTEGER cbName;
// DSN这儿设置不知道理解对了吗? May 5 -puppy
// 起初这儿的东西不对,电脑名肯定不是啦,后面找到了odbc
// 管理器,才知道的!;) 但是,还是登陆不对。
// 原来,MQIS的密码不是这个!我新建了一个数据源,哈哈,对了!13.58
char szDSN[SQL_MAX_DSN_LENGTH+1] = "MQIS", //
szUID[MAXNAME] = "sa",
szAuthStr[MAXNAME] = "123456";

// Allocate the ODBC enviroement and save handle
// 分配环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL,&henv);
if (retcode != SQL_SUCCESS)
printf("Cannot allocate env handle\n");

// Notify ODBC that tis is an ODBC 3.0 application
// 设置版本信息
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
if (retcode != SQL_SUCCESS)
printf("Cannot set ODBC version\n");

// Allocate an ODBC connection handle and connect
// 分配连接句柄
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接选项
retcode = SQLSetConnectAttr(hdbc,SQL_ATTR_LOGIN_TIMEOUT,(void*)5,0);
if (retcode != SQL_SUCCESS)
printf("Cannot allocate connect handle\n");
// 连接到数据源
retcode = SQLConnect(hdbc,(UCHAR*)szDSN, SQL_NTS,
(UCHAR*)szUID, SQL_NTS,
(UCHAR*)szAuthStr, SQL_NTS);
if ( (retcode != SQL_SUCCESS) &&
(retcode!= SQL_SUCCESS_WITH_INFO))
{
// Connects failecd ,call SQLGetDiagRec errors.
printf("Error in connect to datasource\n");

// 处理诊断消息
SQLCHAR Sqlstate[6];
SQLINTEGER NativeError;
SQLCHAR ErrMsg[SQL_MAX_MESSAGE_LENGTH];
int nCountErr= 1;

while(SQLGetDiagRec(SQL_HANDLE_DBC, hdbc,nCountErr,Sqlstate,
&NativeError, ErrMsg, sizeof(ErrMsg),NULL) != SQL_NO_DATA)
printf("Diag:%d, SQLSTATE:%s NativeError: %d ErrMsg:%s\n",
nCountErr++,Sqlstate, NativeError, ErrMsg);
}
else
{
// connects to SQL Server always return informational
// messages .
printf("Congrautiong,connect successs \n");
}

// Allocate statement handle process data
/* SQLExecDirect() */
// retcode = SQLPrepare(hstmt,
// (SQLCHAR*)"USE master ALTER TABLE Products DROP CLOUMN column_test ",
// SQL_NTS);
retcode = SQLExecDirect(hstmt,
(SQLCHAR*)"USE master SELECT * FROM Products",
SQL_NTS);
if ( (retcode != SQL_SUCCESS) &&
(retcode!= SQL_SUCCESS_WITH_INFO))
{
printf("执行SQL语句失败\n");
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
hstmt = SQL_NULL_HSTMT;
}
else
{
printf(" :) command run sucess !\n");
retcode = SQLExecute(hstmt);
}


// get data
// 2.取回查询结果
// 绑定列
/* SQLBindCol()*/

// 断开,释放 disconnect and free
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);


return 0;
}

...全文
51 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xjunp 2004-05-06
boss要我用odbc呀,帮帮我,在odbc中一般要在数据源里面连接数据库,如何连接!
  • 打赏
  • 举报
回复
Pipi0714 2004-05-06
我劝你用ADO,不要用ODBC.因为创建ODBC数据源很麻烦。你说呢?
  • 打赏
  • 举报
回复
red-fly 2004-05-06
不要用ODBC,而用其它方法
比如用COM直接和数据库连接
  • 打赏
  • 举报
回复
Onega 2004-05-06
建议用mfc 或者atl
http://www.fruitfruit.com/vc/mfc/odbc.cpp

http://www.fruitfruit.com/vc/atl/ado.cpp
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库
加入

3957

社区成员

VC/MFC 数据库
申请成为版主
帖子事件
创建了帖子
2004-05-06 11:00
社区公告
暂无公告