救命呀!救救我!执行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;
}