首先遍历输入表的每一行:
for (int i = 0; i < bcls_rec->Tables[0].Rows.get_Count(); i++)
bcls_rec->Tables[0]
:表示输入的第一个表。Rows.get_Count()
:获取表的总行数。- 循环中每次处理表中的一行数据(第
i
行)。
w_cmd_str = "INSERT INTO xxxxxxxx(...) VALUES(@V1, @V2, ..., @V20)";
-
INSERT INTO
:SQL 插入语句,用于向表PMMP.TPMMPPPGA86
中插入一条新记录。 -
列表部分:
(REC_CREATOR, REC_CREATE_TIME, REC_REVISOR, REC_REVISE_TIME, ARCHIVE_FLAG, ARCHIVE_STAMP_NO,
AREA, ST_NO_FROM, ST_NO_TO, WASTARTLEN, WIDTH_CHG_LEN, PRESSURE_MIN, PRESSURE_MAX, NOTE,
ST_NO, ROLL_WIDTH_FROM, ROLL_WIDTH_TO, ROLL_THICK_FROM, ROLL_THICK_TO, USER_NAME)
-
- 指定了要插入的目标列。
- 这些列应该是 xxxxxxxx表中的字段。
-
VALUES(@V1, @V2, ..., @V20)
:- 使用参数化查询,将输入数据绑定到占位符(
@V1
到@V20
)。
- 使用参数化查询,将输入数据绑定到占位符(
然后设置参数:
那么执行ins.Parameters.Set("V", bcls_rec->Tables[0].Rows[i]["REC_CREATOR"].ToString());
........................................................................................................................
ins.Parameters.Set("V", bcls_rec->Tables[0].Rows[i]["USER_NAME"].ToString());
-
每次循环中,逐个字段设置 SQL 插入语句的参数值:
- 参数名(如
@V1
)对应插入语句中的占位符。 - 参数值取自
bcls_rec->Tables[0].Rows[i]
的当前行:Rows[i]
:表示当前的第i
行。["COLUMN_NAME"]
:表示当前行的某一列数据,列名为COLUMN_NAME
。
- 参数名(如
-
示例:
ins.Parameters.Set("V1", bcls_rec->Tables[0].Rows[i]["REC_CREATOR"].ToString())
:- 从输入表的第
i
行中获取REC_CREATOR
列的值,并赋值给 SQL 参数@V1
。
- 从输入表的第
执行SQL插入语句:
ins.SetCommandText(w_cmd_str);
ins.ExecuteNonQuery();
SetCommandText(w_cmd_str)
:设置 SQL 命令为构造的插入语句。ExecuteNonQuery()
:执行插入操作,将当前行数据插入到数据库表xxxxxxxx
。
完整执行流程为:
-
从
bcls_rec->Tables[0]
中读取输入数据:- 假设输入表中有
N
行数据。 - 每一行包含 20 个字段,字段名与数据库表
xxxxxxxx
中的列名对应。
- 假设输入表中有
-
逐行构造 SQL 插入语句:
- 通过循环构造
INSERT INTO
语句,将每行数据绑定到参数中。
- 通过循环构造
-
逐行执行插入操作:
- 每次循环插入一行数据到数据库表
xxxxxxxx
。
- 每次循环插入一行数据到数据库表
SQL 示例:
假设 bcls_rec->Tables[0]
的某一行数据为:
REC_CREATOR | REC_CREATE_TIME | AREA | ST_NO_FROM | WASTARTLEN | USER_NAME |
---|---|---|---|---|---|
"John" | "2024-12-15" | "A1" | 100 | 200 | "Admin" |
最后输出结果为:
INSERT INTO xxxxxxxx (
REC_CREATOR, REC_CREATE_TIME, REC_REVISOR, REC_REVISE_TIME, ARCHIVE_FLAG, ARCHIVE_STAMP_NO,
AREA, ST_NO_FROM, ST_NO_TO, WASTARTLEN, WIDTH_CHG_LEN, PRESSURE_MIN, PRESSURE_MAX, NOTE,
ST_NO, ROLL_WIDTH_FROM, ROLL_WIDTH_TO, ROLL_THICK_FROM, ROLL_THICK_TO, USER_NAME
)
VALUES (
'John', '2024-12-15', ..., 'Admin'
);