动态查询的例子.
其实就是多出了
预处理,和设置参数
#include <windows.h>
#include <stdio.h>
#include <sql.h>
#include <stdlib.h>
#include <sqlext.h>
#include <string.h>
#include <iostream>
/*
*一般情况下,如果返回的错误码retcode < 0,就说明没有处理得当,就是错误的
*/
using namespace std;
int main()
{
HENV henv;
HDBC hdbc;
HSTMT hstmt;
RETCODE retcode;
SQLAllocEnv(&henv);
SQLAllocConnect(henv, &hdbc);
retcode = SQLConnect(hdbc,(unsigned char *)"myDB", SQL_NTS, NULL, 0, NULL, 0);
// cout << retcode << endl;
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
cout << "连接成功" << endl;
}
else
{
cout << "连接失败" << endl;
}
char *sno = new char[256];
char *sname = new char[256];
char *ssex = new char[256];
char *sage = new char[256];
char *sdept = new char[256];
char *ss = new char[256];
char *ss1 = new char[256];
long columnlen;
SQLAllocStmt(hdbc, &hstmt);
// retcode = SQLExecDirect(hstmt, (unsigned char*)"SELECT * FROM student", sizeof("SELECT * FROM student"));
SQLPrepare(hstmt, (unsigned char*) "SELECT * FROM student WHERE ssex = ? AND sage > ? ", SQL_NTS);
printf("请输入:\n");
scanf("%s", ss);
printf("请输入:\n");
scanf("%s", ss1);
// SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_CHAR, SQL_CHAR, 26, 0, &ss, NULL);
// SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_C_CHAR, 256, 0, ss, 0, NULL);
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_CHAR, SQL_CHAR, 256, 0, ss, 256, NULL);
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_CHAR, SQL_CHAR, 256, 0, ss1, 256, NULL);
SQLBindCol(hstmt, 1, SQL_CHAR, sno, 256, &columnlen);//这个语句可不能写错,里面的256,代表的是字符串的最大长度.
SQLBindCol(hstmt, 2, SQL_CHAR, sname, 256, &columnlen);
SQLBindCol(hstmt, 3, SQL_CHAR, ssex, 256, &columnlen);
SQLBindCol(hstmt, 4, SQL_CHAR, sage, 256, &columnlen);
SQLBindCol(hstmt, 5, SQL_CHAR, sdept, 256, &columnlen);
SQLExecute(hstmt);
// retcode = SQLFetch(hstmt);
if (retcode < 0)
{
cout << "没有执行语句" << endl;
}
SQLExecute(hstmt);
retcode = SQLFetch(hstmt);
while (retcode == SQL_ROW_SUCCESS || retcode == SQL_ROW_SUCCESS_WITH_INFO)
{
if (retcode == SQL_ROW_SUCCESS || retcode == SQL_ROW_SUCCESS_WITH_INFO)
{
printf("%s\t%s\t%s\t%s\t%s\n", sno, sname, ssex, sage, sdept);
retcode = SQLFetch(hstmt);
}
}
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
return 0;
}