⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moreandcount.c

📁 在Linux/Unix下面访问WINDOWS SQLSERVER 的ODBC驱动程序
💻 C
字号:
#include "common.h"/* Test for SQLMoreResults and SQLRowCount on batch */static char software_version[] = "$Id: moreandcount.c,v 1.14 2006/07/13 08:21:56 freddy77 Exp $";static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };static voidNextResults(SQLRETURN expected, int line){	if (SQLMoreResults(Statement) != expected) {		if (expected == SQL_SUCCESS)			fprintf(stderr, "Expected another recordset line %d\n", line);		else			fprintf(stderr, "Not expected another recordset line %d\n", line);		exit(1);	}}static voidFetch(SQLRETURN expected){	if (SQLFetch(Statement) != expected) {		if (expected == SQL_SUCCESS)			fprintf(stderr, "Expected another record\n");		else			fprintf(stderr, "Not expected another record\n");		exit(1);	}}static voidDoTest(int prepare){	int n = 0;	static const char query[] =		/* on prepared this recordset should be skipped */		"DECLARE @b INT SELECT @b = 25 "		"SELECT * FROM #tmp1 WHERE i <= 3 "		/* on prepare we cannot distinguish these recordset */		"INSERT INTO #tmp2 SELECT * FROM #tmp1 WHERE i = 1 "		"INSERT INTO #tmp2 SELECT * FROM #tmp1 WHERE i <= 3 "		"SELECT * FROM #tmp1 WHERE i = 1 "		/* but FreeTDS can detect last recordset */		"UPDATE #tmp1 SET i=i+1 WHERE i >= 2";	if (prepare) {		if (SQLPrepare(Statement, (SQLCHAR *) query, SQL_NTS) != SQL_SUCCESS) {			printf("Unable to prepare statement\n");			exit(1);		}		if (SQLExecute(Statement) != SQL_SUCCESS) {			printf("Unable to execute statement\n");			exit(1);		}	} else {		/* execute a batch command select insert insert select and check rows */		if (SQLExecDirect(Statement, (SQLCHAR *) query, SQL_NTS) != SQL_SUCCESS) {			printf("Unable to execute direct statement\n");			exit(1);		}	}	if (!prepare) {		printf("Result %d\n", ++n);		CHECK_COLS(0);		CHECK_ROWS(1);		NextResults(SQL_SUCCESS, __LINE__);	}	printf("Result %d\n", ++n);	CHECK_COLS(1);	CHECK_ROWS(-1);	Fetch(SQL_SUCCESS);	Fetch(SQL_SUCCESS);	CHECK_COLS(1);	CHECK_ROWS(-1);	Fetch(SQL_NO_DATA);	CHECK_COLS(1);	CHECK_ROWS(2);	NextResults(SQL_SUCCESS, __LINE__);	if (!prepare) {		printf("Result %d\n", ++n);		CHECK_COLS(0);		CHECK_ROWS(1);		NextResults(SQL_SUCCESS, __LINE__);		printf("Result %d\n", ++n);		CHECK_COLS(0);		CHECK_ROWS(2);		NextResults(SQL_SUCCESS, __LINE__);	}	printf("Result %d\n", ++n);	CHECK_COLS(1);	CHECK_ROWS(-1);	Fetch(SQL_SUCCESS);	CHECK_COLS(1);	CHECK_ROWS(-1);	Fetch(SQL_NO_DATA);	CHECK_COLS(1);	if (prepare) {		/* collapse 2 recordset... after a lot of testing this is the behavior! */		CHECK_ROWS(2);	} else {		CHECK_ROWS(1);		NextResults(SQL_SUCCESS, __LINE__);		CHECK_COLS(0);		CHECK_ROWS(2);	}	NextResults(SQL_NO_DATA, __LINE__);#ifndef TDS_NO_DM	if (!prepare)		CHECK_COLS(-1);	CHECK_ROWS(-2);#endif}intmain(int argc, char *argv[]){	Connect();	Command(Statement, "create table #tmp1 (i int)");	Command(Statement, "create table #tmp2 (i int)");	Command(Statement, "insert into #tmp1 values(1)");	Command(Statement, "insert into #tmp1 values(2)");	Command(Statement, "insert into #tmp1 values(5)");	printf("Use direct statement\n");	DoTest(0);	printf("Use prepared statement\n");	DoTest(1);	Disconnect();	printf("Done.\n");	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -