C语言ODBC连接ACCESS数据库

该代码是c通过ODBC直接读取数据库,从微软下载的,经过本人在VS2013下面严格测试过。不需要单独配置ODBC驱动。
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\test.mdb;";
test.mdb修改为你的access数据库所在的路径。

如果你的数据库是access2007以下版本去掉*.accdb

程序源码:

#include 
#include 
#include  

/* Data Access Method used in this sample */
const char* DAM = "Direct ODBC";
/* Connection string for Direct ODBC */
char szDSN[256] ="Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=D:\\c_access.accdb;";

void main()
{
	HENV hEnv;
	HDBC hDbc;

	/* ODBC API return status */
	RETCODE rc;
	int iConnStrLength2Ptr;
	char szConnStrOut[256];
	unsigned char* query = "select * from userInfo";
	SQLCHAR chval1[128], chval2[128], colName[128];
	int ret1;
	int ret2;

	/* Number of rows and columns in result set */
	SQLINTEGER rowCount = 0;
	SQLSMALLINT fieldCount = 0, currentField = 0;
	HSTMT hStmt;

	/* Allocate an environment handle */
	rc = SQLAllocEnv(&hEnv);

	/* Allocate a connection handle */
	rc = SQLAllocConnect(hEnv, &hDbc);

	/* Connect to the 'c_access.accdb;' database */
	rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN,
		SQL_NTS, (unsigned char*)szConnStrOut,
		255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);

	if (SQL_SUCCEEDED(rc))
	{
		printf("%s: Successfully connected to database. Data source name: \n %s\n",
			DAM, szConnStrOut);
		/* Prepare SQL query */
		printf("%s: SQL query:\n %s\n", DAM, query);
		rc = SQLAllocStmt(hDbc, &hStmt);
		rc = SQLPrepare(hStmt, query, SQL_NTS);
		/* Bind result set columns to the local buffers */
		rc = SQLBindCol(hStmt, 1, SQL_C_CHAR, chval1, 128, (SQLINTEGER*)&ret1);
		rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, chval2, 128, (SQLINTEGER*)&ret2);
		/* Excecute the query and create a record set */
		rc = SQLExecute(hStmt);
		if (SQL_SUCCEEDED(rc))
		{
			printf("%s: Retrieve schema info for the given result set:\n", DAM);
			SQLNumResultCols(hStmt, &fieldCount);
			if (fieldCount > 0)
			{
				for (currentField = 1; currentField <= fieldCount; currentField++)
				{
					SQLDescribeCol(hStmt, currentField,
						colName, sizeof(colName), 0, 0, 0, 0, 0);
					printf(" | %s", colName);
				}
				printf("\n");
			}
			else
			{
				printf("%s: Error: Number of fields in the result set is 0.\n", DAM);
			}
			printf("%s: Fetch the actual data:\n", DAM);
			/* Loop through the rows in the result set */
			rc = SQLFetch(hStmt);
			while (SQL_SUCCEEDED(rc))
			{
				printf(" | %s | %s\n", chval1, chval2);
				rc = SQLFetch(hStmt);
				rowCount++;
			};
			printf("%s: Total Row Count: %d\n", DAM, rowCount);
			rc = SQLFreeStmt(hStmt, SQL_DROP);
		}
	}else
	{
		printf("%s: Couldn't connect to %s.\n", DAM, szDSN);
	}

	/* Disconnect and free up allocated handles */
	SQLDisconnect(hDbc);
	SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
	SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
	system("pause");
}

运行结果:

C语言ODBC连接ACCESS数据库_第1张图片

你可能感兴趣的:(多线程网络数据库)