1. 测试环境

1.1 操作系统

1.2 IDE

2. ODBC数据源配置

2.1 打开电脑“控制面板”打开“管理工具”

 

2.2 根据环境选择32位/64位ODBC数据源

注:此处如果位数不对,后续开发连接数据库时会报IM014错误。(SQLRETURN)结构冲突。

2.3 选择用户DSN或者系统DSN,点击添加

2.4 选择驱动(实验环境为DM8 ODBC DRIVER)

 2.5 配置相关参数

2.6 测试

 

3. VS2022数据库连接测试

3.1  打开VS2022,点击左侧服务器资源管理器

3.2  点击连接到服务器

 3.3 点击其他,选择“用于ODBC的.NET Framework数据提供程序

 

3.4 指定刚才配置的数据源,并填写对应的账号密码

3.5 测试连接

 注:此处可能会遇到“加密模块加载失败”报错。是因为缺少相应的文件导致。

linux: libcrypto.so和libssl.so

windows:libeay32.dll 和 ssleay32dll

放入对应系统文件夹内即可。

4. VS2022 下访问达梦数据库并创建表空间

测试代码如下:

#include<iostream>
#include<Windows.h>
#include<sql.h>
#include<sqltypes.h>
#include<sqlext.h>
using  namespace std;
#define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO)// #define SQL_SUCCEEDED(rc)  (((rc)&(~1))==0) 

#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)))
SQLHENV henv;/* 环境句柄 */
SQLHDBC hdbc;/* 连接句柄 */
SQLHDBC hstmt;/* 语句句柄 */
SQLRETURN sret; /* 返回代码 */
void getError(SQLHDBC hhandle, SQLSMALLINT TYPE);

int main()
{

	/* 申请一个环境句柄 */
	sret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
	/* 设置环境句柄的 ODBC 版本 */
	sret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,
		SQL_IS_INTEGER);
	/* 申请一个连接句柄 */
	sret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	sret = SQLConnectW(hdbc, (SQLWCHAR*)L"DM8-2", SQL_NTS, (SQLWCHAR*)L"SYSDBA", SQL_NTS, (SQLWCHAR*)L"SYSDBA", SQL_NTS);
	if (RC_NOTSUCCESSFUL(sret)) {
		getError(hdbc, SQL_HANDLE_DBC);
		return 0;
	}
	SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

	wchar_t sql[1024];

	swprintf(sql, 1024, L"%hs", "CREATE TABLESPACE \"LYT1\" DATAFILE '/home/dmdba/dmdbms/data/DAMENG/data/LYT1.DBF' SIZE 128");

	sret = SQLExecDirect(hstmt, sql, sizeof(sql)/2);

	if (RC_NOTSUCCESSFUL(sret)) {
		getError(hstmt, SQL_HANDLE_STMT);
		return 0;
	}

	/* 释放语句句柄 */
	SQLFreeHandle(SQL_HANDLE_DBC, hstmt);
	/* 释放连接句柄 */
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
	/* 释放环境句柄 */
	SQLFreeHandle(SQL_HANDLE_ENV, henv);

	return 0;
}

void getError(SQLHDBC hhandle, SQLSMALLINT TYPE)
{
	/* 连接数据源失败! */
	SQLINTEGER   NumRecords = 0;
	SQLGetDiagField(TYPE,
		hhandle,
		0,
		SQL_DIAG_NUMBER,
		&NumRecords,
		SQL_IS_INTEGER,
		NULL);
	printf("Total Number of diagnostic records: %d\n", NumRecords);

	SQLSMALLINT   Counter = 0;
	SQLINTEGER     NativeErr = 0;
	SQLWCHAR      SQLState[6];
	SQLWCHAR      ErrMsg[512];
	SQLSMALLINT  ErrMsgLen = 0;
	for (Counter = 1; Counter <= NumRecords; Counter++)
	{
		SQLGetDiagRec(TYPE,
			hhandle,
			Counter,
			SQLState,
			&NativeErr,
			ErrMsg,
			sizeof(ErrMsg) / 2,
			&ErrMsgLen);
		printf("SQLSTATE : %ls\n", SQLState);
		printf("%ls\n", ErrMsg);
	}
}

4.1 执行代码在达梦manager管理工具中查看结果(也可以在vs2022中)

测试数据库IP

代码执行前表空间

代码执行后表空间

可以看到成功访问了数据库并且创建了表空间LYT1。

注:详细的开发细节请参考《DM8程序员手册.pdf》及微软官方API文档

相关链接:

https://www.dameng.com/list_103.html

ODBC |Microsoft Docs - ODBC API Reference | Microsoft Docs

更多达梦相关技术文档可访问​​​​​​达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐