书接上回

(数据库:Sqlserver 2019 ,ODBC , BULK INSERT C++.10万行数据,写入耗时3S_wenluderen的专栏-CSDN博客

***

子:

#define COUNT (100000) 这个表示合计要插入的行数。

#define ROW_ARRAY_SIZE 1000//每次插入的行数

**

后面代码做了两个嵌套for循环,就为了多次写入。 最终效果是写入100次,每次写入1000行,合计10万行。

**

此处做了第一次剥离, 将最外面的for循环剥离。

丑:

程序里面定义#define ROW_ARRAY_SIZE 1000//每次插入的行数

然后呢

ORDWTH  ordwth_array[ROW_ARRAY_SIZE];

这个ORDWTH   是一个结构体。看结构体里面 内容,应该是一个超市里面的货物。

这个结构体里面包含货物的价格,供应商,库存,数量 等等常规信息。

为了便于理解,我打算把ORDWTH 这个名字改掉,修改为:supermarker_goods

就是超市货物的意思,缩写为:s_m_g.

寅:

然后重点来了, 超市里面的货物种类很多,所以新建了一个数组。原来名字叫

ordwth_array[ROW_ARRAY_SIZE];其中ROW_ARRAY_SIZE=1000

我修改后名字为:s_m_g_array。

我觉得 这个BULK INSERT 的核心思想在于,将要写入的数据打包好,整体写入。

卯:

BULK INSERT  是一种空间换时间的技术,会使用很多内存空间,也就是句柄

SQLAllocHandle这个函数就是用申请句柄(内存空间的):

SQL_HANDLE_ENV:用于申请环境句柄

SQL_HANDLE_DBC :用于申请连接句柄

SQL_HANDLE_DESC:用于申请描述符句柄

SQL_HANDLE_STMT:用于申请语句句柄

(ODBC学习笔记—SQLAllocHandle_不上进的程序员-CSDN博客_sqlallochandle)

获取到环境句柄后,就可以设定设个环境的很多属性,用的函数是:SQLSetEnvAttr。

(只有在环境中未分配任何连接句柄时,应用程序才能调用 SQLSetEnvAttr。

可以设定的属性包含:

1)SQL_ATTR_ODBC_VERSION (根据取值决定ODBC表现出的版本特性。)

2)SQL_ATTR_OUTPUT_NTS(确定返回字符串的结束符。默认值为 SQL_TRUE返回’/0’结束)

3)SQL_ATTR_CP_MATCH(决定从连接池中选择连接的精度。)

4)SQL_ATTR_CONNECTION_POOLING(连接池)

(ODBC学习笔记—SQLSetEnvAttr_不上进的程序员-CSDN博客_sqlsetenvattr)

巳:

SQLAllocHandle 分配一个环境、连接、语句或描述符句柄

//第三步:分配链接句柄
   //SQL_HANDLE_DBC :用于申请连接句柄
    SQLHDBC     G_hDbc = NULL;//设备句柄
    Gsz_ret = SQLAllocHandle(SQL_HANDLE_DBC, Gsz_hEnv, &G_hDbc);

然后使用:SQLSetConnectAttr函数设定链接句柄的属性

Gsz_ret=SQLSetConnectAttr(G_hDbc_linajie, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);

1)SQL_ATTR_ACCESS_MODE(SQL_MODE_READ_ONLY  设置为只读连接,)

2)SQL_ATTR_ASYNC_ENABLE(该连接下属的stmthandle所执行的语句可以异步处理)

3)SQL_ATTR_AUTO_IPD(??)

4)SQL_ATTR_AUTOCOMMIT(设置是否自动提交: )

5)SQL_ATTR_CONNECTION_DEAD(终止连接)

6)SQL_ATTR_CONNECTION_TIMEOUT(除了查询与登录外的操作超时时长,单位为秒,整型。默认为0秒,意思不是执行sql语句立马超时而是不会超时,一直等待语句完成才向后执行)

7)SQL_ATTR_CURRENT_CATALOG(一个包含database名称的字符串指针。)

8)SQL_ATTR_LOGIN_TIMEOUT 设置登录超时时长,同SQL_ATTR_CONNECTION_TIMEOUT

9)SQL_ATTR_METADATA_ID(设定连接CATALOG函数参数)

10)SQL_ATTR_ODBC_CURSORS(设置连接游标参数 )

11)SQL_ATTR_PACKET_SIZE(设置连接包大小,格式为(void*)(整型数字))

12)SQL_ATTR_QUIET_MODE(设置对话框,当窗口句柄为空的时候,设置为不显示对话框)

13)SQL_ATTR_TRACE(设置连接是否启用跟踪)

14)SQL_ATTR_TRACEFILE(设置跟踪文件路径,参数为一个 null-terminated 字符串。)

15)SQL_ATTR_TRANSLATE_LIB(设置连接转化字符集的动态库路径,参数为一个 null-terminated 字符串)

16)SQL_ATTR_TRANSLATE_OPTION(设置连接转化字符集的参数)

17)SQL_ATTR_TXN_ISOLATION(设置连接事务隔离级别)

(SQLSetConnectAttr_jadeshu的博客-CSDN博客)

***

//第四步:开始链接数据库。
    //根据DSN ,连接数据库
    //SQL_NTS 表示自动计算字符串的长度
    Gsz_ret = SQLConnect(G_hDbc_linajie, (SQLTCHAR*)_T("Data_source_Test"), SQL_NTS, (SQLTCHAR*)_T("sa"), SQL_NTS, (SQLTCHAR*)_T("123456"), SQL_NTS);

(下面进入gsz_insert 函数内部)

未:

分配语句句柄
    SQLHSTMT  hStmt = NULL;
    //SQLAllocHandle 分配一个环境、连接、语句或描述符句柄。
    //该函数就是用来分配句柄的,句柄类型参考参数详解。
    //参数1 HandleType:是需要分配的句柄的类型(SQL_HANDLE_ENV:用于申请环境句柄  SQL_HANDLE_DBC :用于申请连接句柄  SQL_HANDLE_STMT:用于申请语句句柄  SQL_HANDLE_DESC:用于申请描述符句柄  )
    //参数2InputHandle: 是指分配的句柄在什么句柄之上,例如连接句柄,需要在环境句柄之上。
    ret = SQLAllocHandle(SQL_HANDLE_STMT, L_hDbc, &hStmt);

//甲:分配语句句柄
    SQLHSTMT  hStmt_yuju = NULL;//下面就是围绕 这个语句展开工作,比如配置各种属性.

打个比方吧,这就好比 要要写入的一堆数据,整理好码放整齐,然后一起写入。

(新开一个帖子,继续深究这个语句)

数据库:关于BULK INSERT 学习笔记(1)相关推荐

  1. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  2. NCBI SRA数据库使用详解----学习笔记

    NCBI SRA数据库使用详解----学习笔记 wxw060709 2019-12-25 15:58:47  1014  收藏 2 分类专栏: 生物信息学 版权 SRA(Sequence ReadAr ...

  3. 数据库原理及应用学习笔记

    在前面先记录一个不错的博客内容http://blog.codinglabs.org/articles/theory-of-mysql-index.html 这时在B站上看的东南大学的视频的学习笔记,主 ...

  4. linux给数据库重命名,Linux学习笔记:mv移动或文件重命名

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 语法:mv 源文件 目标文件 视mv命令中 ...

  5. SSRS:使用SQL2008教程学习Reporting Services之数据库AdventureWorks2008问题_学习笔记1

    首先声明我是菜鸟,刚开始学习Reporting Services.在学习教程中的一点笔记. 从SQL2005开始,微软就提供了强大的Reporting Services功能,的确好用,对于经常需要出复 ...

  6. 巨杉数据库V5.2 发布会 学习笔记

    文章目录 1. 巨杉数据库:湖仓一体 公司背景 从结果数据到全量数据 从异步离线到实时对客 2. SequoiaDB v5.2 特性 join优化 多维分区 列存微分区 分片并发+可变分区大小 多模数 ...

  7. mysql 9.0创建数据库_PHP与MySQL学习笔记9:创建Web数据库

    1.在服务器上部署MySQL服务基本步骤合注意点 1)安装MySQL(命令安装.安装包安装等) 2)考虑是否需要一个独立的操作系统用户权限来运行MySQL程序. 3)路径的设置 4)root密码 (附 ...

  8. mysql数据库工程师网易微专业_网易MySQL数据库工程师微专业学习笔记(五)

    一.mysql数据库中的存储引擎 mysql在创建数据表时可以通过engine关键字设置存储引擎的类型,也可以通过alter命令来修改表的存储引擎.可以通过show engines命令来查看当前mys ...

  9. Linux下数据库(sqlite3)学习笔记

          sqlite3 数据库安装 1. 本地安装 sudo dpkg -i *.deb 2.在线安装 sudo apt-get install sqlite3 3.使用压缩包解压 压缩包下载路径 ...

  10. 达梦数据库DM8 DCA认证学习笔记

    远程访问数据库需要关闭防火墙 [root@localhost ~]# systemctl status firewalld [root@localhost ~]# systemctl stop fir ...

最新文章

  1. JS栈结构的简单封装
  2. 快速搭建对话机器人,就用这一招!
  3. windows笔记-内存映射文件
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数发生器种子( seed)
  5. javascript,jquery 操作 dropdownlist ,select
  6. postgresql定义访问ip与用户_PostgreSQL 设置允许访问IP的操作
  7. UML---(1)一张图看懂UML 类图
  8. _DataStructure_C_Impl:共享栈
  9. 接口测试参数化详解(Jmeter)
  10. c++ stl下的sort()函数介绍及基本用法
  11. 两款Java中小医院信息管理系统源码
  12. 计算机毕业设计jspm平面设计类众包威客网网站mjmBBmysql程序
  13. opencv图像灰度化
  14. 脉冲神经网络 神经元模型-IF模型(2)
  15. 计算机3d打印技术论文,金属3D打印技术探究论文
  16. 273. 整数转换英文表示
  17. osm数据导入mysql_导入OSM数据至PostgreSQL数据库
  18. linux vi编辑器操作手册
  19. B站在计算机内部,如何在Bilibili中弹幕式播放本地视频?
  20. JavaScript 时间操作

热门文章

  1. 尚硅谷大数据技术之Flume
  2. chrome 开启HEVC硬件解码
  3. PHP毕业设计——许愿墙(有源码)
  4. 推荐VScode十大实用插件
  5. 四叶草clover配置工具:Clover Configurator for Mac
  6. centos7轻松搭建文件服务器
  7. 转载visio 绘图矢量图素材网站
  8. ubuntu cmakelists 配置海康 SDK
  9. gif一键抠图 在线_不会PS,怎么免费在线抠图?一键轻松制作头像
  10. 淘宝二级类目、换类目会降权吗,换类目对店铺的影响