Skip to content

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() — fresh SQLBuilder for the next statement.
  • addUpdate() / addInsert() — serialize current builder into the queue (calls toUpdate / toInsert internally).
  • 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

  1. After newRow, call addInsert / addUpdate or the SQL is discarded.
  2. Each BatchSQL is 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();