static CDBVariantArray TestBatch(COdbc odbc, List <KeyValuePair <CDBColumnInfoArray, CDBVariantArray> > ra) { CDBVariantArray vPData = new CDBVariantArray(); //first set vPData.Add(-1); //return int. output parameter value not important. vPData.Add(1); //@testid vPData.Add("<test_sqlserver />"); //@myxml vPData.Add(Guid.NewGuid()); //@tuuid vPData.Add(-1); //@myvar. vPData.Add(1); vPData.Add(2.35m); //input/output vPData.Add(null); //second set vPData.Add(2); //return int. output parameter data type not important. vPData.Add(4); //@testid vPData.Add("<test_sqlserver_again />"); //@myxml vPData.Add(Guid.NewGuid()); //@tuuid vPData.Add(2); //@myvar. vPData.Add(2); vPData.Add(0.99m); //input/output vPData.Add(null); //Parameter info array can be ignored for some ODBC drivers like MySQL, MS SQL Server, etc but performance will be degraded for code simplicity COdbc.DRows r = (handler, rowData) => { //rowset data come here int last = ra.Count - 1; KeyValuePair <CDBColumnInfoArray, CDBVariantArray> item = ra[last]; item.Value.AddRange(rowData); }; COdbc.DRowsetHeader rh = (handler) => { //rowset header comes here KeyValuePair <CDBColumnInfoArray, CDBVariantArray> item = new KeyValuePair <CDBColumnInfoArray, CDBVariantArray>(handler.ColumnInfo, new CDBVariantArray()); ra.Add(item); }; bool ok = odbc.ExecuteBatch(tagTransactionIsolation.tiUnspecified, "select getdate();{?=call sp_TestRare1(?,?,?,?)};{call sqltestdb.dbo.sp_TestProc(?,?,?)}", vPData, er, r, rh); return(vPData); }