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