BatchSQL
INFO
BatchSQL queues many SQL commands built from SQLBuilder, executes them in one round-trip, and returns the total affected rows.
Core API
newRow()— freshSQLBuilderfor the next statement.addUpdate()/addInsert()— serialize current builder into the queue (callstoUpdate/toInsertinternally).exeNonQuery()— run everything in the queue.
Pattern A — newRow + add*
c#
var bkit = DBCash.newBatchSQL(0);
foreach (DataRow track in trackDt.Rows) {
var dangOID = track["ZH_Danger_FK"].ToString();
var progs = progDt.Select(string.Format("ZH_Danger_FK='{0}'", dangOID));
if(progs.Length > 0)
{
var st = progs[0]["FP_MarkState"];
bkit.newRow()
.setTable("ZH_DangTrack")
.set("DT_ProgMarking", st)
.where("ZH_DangTrackOID", track["ZH_DangTrackOID"]);
bkit.addUpdate();
}
}
cc=bkit.exeNonQuery();Pattern B — inject SQLCmd
More control; enqueue pre-built commands:
c#
kvkit.set("ZH_AccumulateConsumeOID", Guid.NewGuid())
.set("SYS_Created", DateTime.Now)
.set("SYS_Deleted", false)
.set("AC_year", year)
.set("AC_month", month)
.set("AC_unit", kv.Key)
.set("AC_state", "1", false);
bkit.addSQL(kvkit.toInsert());Notes
- After
newRow, calladdInsert/addUpdateor the SQL is discarded. - Each
BatchSQLis tied to one connection slot—open another instance for another database.
Extended example
c#
var bkit = DBCash.newBatchSQL(0);
foreach (var kv in list)
{
var code = kv["id"];
var kitt = bkit.newRow()
.setTable("HH_MdmRisk");
var rows = oldDt.Select(wh);
if (rows.Length == 0)
{
kitt.set("HH_MdmRiskOID", Guid.NewGuid())
.set("MR_Id", code)
.set("MR_Created", DateTime.Now)
.set("MR_Updated", DateTime.Now)
.set("MR_Used", false)
.set("MR_IsShow", "1",false)
;
bkit.addInsert();
}
else if (rows.Length == 1)
{
kitt.set("MR_Updated", DateTime.Now);
kitt.where("HH_MdmRiskOID", rows[0]["HH_MdmRiskOID"]);
bkit.addUpdate();
}
else
{
continue;
}
}
var cc = bkit.exeNonQuery();