static Task <CAsyncDBHandler.SQLExeInfo> TestBLOBByPreparedStatement(CSqlite sqlite, List <KeyValue> ra) { //a complex SQL statement combined with two insert and query prepare statements sqlite.Prepare("insert or replace into employee(EMPLOYEEID,CompanyId,name,JoinDate,image,DESCRIPTION,Salary)values(?,?,?,?,?,?,?);select * from employee where employeeid=?"); CDBVariantArray vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set of data vData.Add(1); vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(m_wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_wstr); vData.Add(254000.0); vData.Add(1); //second set of data vData.Add(2); vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(m_str); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_str); vData.Add(20254000.0); vData.Add(2); //third set of data vData.Add(3); vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(m_wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_wstr); vData.Add(6254000.0); vData.Add(3); } //send three sets of parameterized data in one shot for processing return(sqlite.execute(vData, (handler, rowData) => { //rowset data come here int last = ra.Count - 1; KeyValue item = ra[last]; item.Value.AddRange(rowData); }, (handler) => { //rowset header meta info comes here KeyValue item = new KeyValue(handler.ColumnInfo, new CDBVariantArray()); ra.Add(item); })); }
static void InsertBLOBByPreparedStatement(COdbc odbc) { string wstr = ""; while (wstr.Length < 128 * 1024) { wstr += "广告做得不那么夸张的就不说了,看看这三家,都是正儿八经的公立三甲,附属医院,不是武警,也不是部队,更不是莆田,都在卫生部门直接监管下,照样明目张胆地骗人。"; } string str = ""; while (str.Length < 256 * 1024) { str += "The epic takedown of his opponent on an all-important voting day was extraordinary even by the standards of the 2016 campaign -- and quickly drew a scathing response from Trump."; } string sqlInsert = "insert into employee(EmployeeId,CompanyId,name,JoinDate,myimage,DESCRIPTION,Salary)values(?,?,?,?,?,?,?)"; bool ok = odbc.Prepare(sqlInsert, dr); CDBVariantArray vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set of data vData.Add(1); vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(254000.24m); //second set of data vData.Add(2); vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(str); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(str); vData.Add(20254000.15m); //third set of data vData.Add(3); vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(6254000.08m); //send three sets of parameterized data in one shot for processing ok = odbc.Execute(vData, er); } }
/// <summary> /// Dequeue messages from a persistent message queue file at server side in batch /// </summary> /// <param name="key">An ASCII string for identifying a queue at server side</param> /// <param name="d">A callback for tracking data like remaining message count within a server queue file, queue file size in bytes, message dequeued within this batch and bytes dequeued within this batch</param> /// <param name="timeout">A time-out number in milliseconds</param> /// <returns>true for sending the request successfully, and false for failure</returns> public bool Dequeue(byte[] key, DDequeue d, uint timeout) { DAsyncResultHandler rh = null; if (key == null) key = new byte[0]; lock (m_csQ) { m_keyDequeue = key; if (d != null) { rh = (ar) => { ulong messageCount, fileSize, ret; ar.Load(out messageCount).Load(out fileSize).Load(out ret); uint messages = (uint)ret; uint bytes = (uint)(ret >> 32); d(messageCount, fileSize, messages, bytes); }; m_dDequeue = d; } else { m_dDequeue = null; } } using (CScopeUQueue sb = new CScopeUQueue()) { sb.Save(key).Save(timeout); return SendRequest(idDequeue, sb, rh); } }
/// <summary> /// Dequeue messages from a persistent message queue file at server side in batch /// </summary> /// <param name="key">An ASCII string for identifying a queue at server side</param> /// <param name="d">A callback for tracking data like remaining message count within a server queue file, queue file size in bytes, message dequeued within this batch and bytes dequeued within this batch</param> /// <param name="timeout">A time-out number in milliseconds</param> /// <param name="discarded">a callback for tracking cancel or socket closed event</param> /// <returns>true for sending the request successfully, and false for failure</returns> public virtual bool Dequeue(byte[] key, DDequeue d, uint timeout, DDiscarded discarded) { DAsyncResultHandler rh = null; if (key == null) { key = new byte[0]; } lock (m_csQ) { m_keyDequeue = key; if (d != null) { rh = (ar) => { ulong messageCount, fileSize, ret; ar.Load(out messageCount).Load(out fileSize).Load(out ret); uint messages = (uint)ret; uint bytes = (uint)(ret >> 32); d(messageCount, fileSize, messages, bytes); }; m_dDequeue = d; } else { m_dDequeue = null; } using (CScopeUQueue sb = new CScopeUQueue()) { sb.Save(key).Save(timeout); return(SendRequest(idDequeue, sb, rh, discarded, (DOnExceptionFromServer)null)); } } }
public bool Enqueue <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>(byte[] key, ushort idMessage, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, DEnqueue e, DDiscarded discarded) { using (CScopeUQueue sb = new CScopeUQueue()) { sb.Save(t0).Save(t1).Save(t2).Save(t3).Save(t4).Save(t5).Save(t6).Save(t7).Save(t8).Save(t9); return(Enqueue(key, idMessage, sb.UQueue, e, discarded)); } }
public bool Enqueue <T0, T1, T2, T3, T4>(byte[] key, ushort idMessage, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, DEnqueue e, DDiscarded discarded) { using (CScopeUQueue sb = new CScopeUQueue()) { sb.Save(t0).Save(t1).Save(t2).Save(t3).Save(t4); return(Enqueue(key, idMessage, sb.UQueue, e, discarded)); } }
public bool Enqueue <T0>(byte[] key, ushort idMessage, T0 t0, DEnqueue e, DDiscarded discarded) { using (CScopeUQueue sb = new CScopeUQueue()) { sb.Save(t0); return(Enqueue(key, idMessage, sb.UQueue, e, discarded)); } }
public bool Enqueue <T0, T1, T2, T3, T4, T5, T6, T7>(byte[] key, ushort idMessage, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, DEnqueue e, DDiscarded discarded) { if (key == null) { key = new byte[0]; } using (CScopeUQueue sb = new CScopeUQueue()) { sb.Save(t0).Save(t1).Save(t2).Save(t3).Save(t4).Save(t5).Save(t6).Save(t7); return(Enqueue(key, idMessage, sb.UQueue, e, discarded)); } }
public bool Enqueue <T0, T1, T2>(byte[] key, ushort idMessage, T0 t0, T1 t1, T2 t2, DEnqueue e, DDiscarded discarded) { if (key == null) { key = new byte[0]; } using (CScopeUQueue sb = new CScopeUQueue()) { sb.Save(t0).Save(t1).Save(t2); return(Enqueue(key, idMessage, sb.UQueue, e, discarded)); } }
static void Main(string[] args) { using (CScopeUQueue sb = new CScopeUQueue()) { CMyStruct msOrig = CMyStruct.MakeOne(); sb.Save(msOrig); CMyStruct ms = sb.Load <CMyStruct>(); System.Diagnostics.Debug.Assert(sb.UQueue.GetSize() == 0); //check if both msOriginal and ms are equal in value. } }
static Task <CAsyncDBHandler.SQLExeInfo> TestBLOBByPreparedStatement(CMysql mysql) { mysql.Prepare("insert into employee(CompanyId,name,JoinDate,image,DESCRIPTION,Salary)values(?,?,?,?,?,?)"); CDBVariantArray vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set of data vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(m_wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_wstr); vData.Add(254000.0); //second set of data vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(m_str); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_str); vData.Add(20254000.0); //third set of data vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(m_wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_wstr); vData.Add(6254000.0); //send three sets of parameterized data in one shot for processing return(mysql.execute(vData)); } }
static void InsertBLOBByPreparedStatement(CSqlServer sql) { string wstr = ""; while (wstr.Length < 128 * 1024) { wstr += "广告做得不那么夸张的就不说了,看看这三家,都是正儿八经的公立三甲,附属医院,不是武警,也不是部队,更不是莆田,都在卫生部门直接监管下,照样明目张胆地骗人。"; } string str = ""; while (str.Length < 256 * 1024) { str += "The epic takedown of his opponent on an all-important voting day was extraordinary even by the standards of the 2016 campaign -- and quickly drew a scathing response from Trump."; } string sqlInsert = "insert into employee(EMPLOYEEID, CompanyId,name,JoinDate,myimage,DESCRIPTION,Salary)values(@EMPLOYEEID,@CompanyId,@name,@JoinDate,@myimage,@DESCRIPTION,@Salary)"; CParameterInfoArray vInfo = new CParameterInfoArray(); CParameterInfo info = new CParameterInfo(); info.ParameterName = "@EMPLOYEEID"; info.DataType = tagVariantDataType.sdVT_INT; vInfo.Add(info); info = new CParameterInfo(); info.ParameterName = "@CompanyId"; info.DataType = tagVariantDataType.sdVT_INT; vInfo.Add(info); info = new CParameterInfo(); info.ParameterName = "@name"; info.ColumnSize = 64; info.DataType = tagVariantDataType.sdVT_BSTR; vInfo.Add(info); info = new CParameterInfo(); info.ParameterName = "@JoinDate"; info.DataType = tagVariantDataType.sdVT_DATE; vInfo.Add(info); info = new CParameterInfo(); info.ParameterName = "@myimage"; info.ColumnSize = uint.MaxValue; info.DataType = tagVariantDataType.sdVT_UI1 | tagVariantDataType.sdVT_ARRAY; vInfo.Add(info); info = new CParameterInfo(); info.ParameterName = "@DESCRIPTION"; info.ColumnSize = uint.MaxValue; info.DataType = tagVariantDataType.sdVT_BSTR; vInfo.Add(info); info = new CParameterInfo(); info.ParameterName = "@Salary"; info.ColumnSize = uint.MaxValue; info.DataType = tagVariantDataType.sdVT_DECIMAL; info.Precision = 15; info.Scale = 2; vInfo.Add(info); bool ok = sql.Prepare(sqlInsert, dr, vInfo.ToArray()); CDBVariantArray vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set of data vData.Add(1); vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(wstr); byte[] bytes = sbBlob.UQueue.GetBuffer(); vData.Add(bytes); vData.Add(wstr); vData.Add(254000.2460d); //second set of data vData.Add(2); vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(str); bytes = sbBlob.UQueue.GetBuffer(); vData.Add(bytes); vData.Add(str); vData.Add(20254000.197d); //third set of data vData.Add(3); vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(wstr); bytes = sbBlob.UQueue.GetBuffer(); vData.Add(bytes); vData.Add(wstr); vData.Add(6254000.5d); //execute multiple sets of parameter data in one short ok = sql.Execute(vData, er); } }
static Task <CAsyncDBHandler.SQLExeInfo> TestBatch(CMysql mysql, List <KeyValue> ra, out CDBVariantArray vData) { //sql with delimiter '|' string sql = @" delete from employee;delete from company| INSERT INTO company(ID,NAME,ADDRESS,Income)VALUES(?,?,?,?)| insert into employee(CompanyId,name,JoinDate,image,DESCRIPTION,Salary)values(?,?,?,?,?,?)| SELECT * from company;select * from employee;select curtime()| call sp_TestProc(?,?,?)"; vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set vData.Add(1); vData.Add("Google Inc."); vData.Add("1600 Amphitheatre Parkway, Mountain View, CA 94043, USA"); vData.Add(66000000000.15); vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(m_wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_wstr); vData.Add(254000.26); vData.Add(1); //input vData.Add(1.4); //input-output vData.Add(0); //output //second set vData.Add(2); vData.Add("Microsoft Inc."); vData.Add("700 Bellevue Way NE- 22nd Floor, Bellevue, WA 98804, USA"); vData.Add(93600000000.37); vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(m_str); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_str); vData.Add(20254000.85); vData.Add(2); //input vData.Add(2.5); //input-output vData.Add(0); //output //third set vData.Add(3); vData.Add("Apple Inc."); vData.Add("1 Infinite Loop, Cupertino, CA 95014, USA"); vData.Add(234000000000.09); vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(m_wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(m_wstr); vData.Add(6254000.55); vData.Add(0); //input vData.Add(4.5); //input-output vData.Add(0); //output } CMysql.DRows r = (handler, rowData) => { //rowset data come here int last = ra.Count - 1; KeyValuePair <CDBColumnInfoArray, CDBVariantArray> item = ra[last]; item.Value.AddRange(rowData); }; CMysql.DRowsetHeader rh = (handler) => { //rowset header comes here KeyValue item = new KeyValue(handler.ColumnInfo, new CDBVariantArray()); ra.Add(item); }; //first, start a transaction with ReadCommited isolation //second, execute delete from employee;delete from company //third, prepare and execute three sets of // INSERT INTO company(ID,NAME,ADDRESS,Income)VALUES(?,?,?,?) //fourth, prepare and execute three sets of //insert into employee(CompanyId,name,JoinDate,image,DESCRIPTION,Salary)values(?,?,?,?,?,?) //fifth, SELECT * from company;select * from employee;select curtime() //sixth, prepare and three sets of call sp_TestProc(?,?,?) //last, commit transaction if there is no error, and rollback if there is one or more errors return(mysql.executeBatch(tagTransactionIsolation.tiReadCommited, sql, vData, r, rh, "|")); }
static CDBVariantArray TestBatch(CMysql mysql, List <KeyValuePair <CDBColumnInfoArray, CDBVariantArray> > ra) { //sql with delimiter '|' string sql = @" delete from employee;delete from company| INSERT INTO company(ID,NAME,ADDRESS,Income)VALUES(?,?,?,?)| insert into employee(CompanyId,name,JoinDate,image,DESCRIPTION,Salary)values(?,?,?,?,?,?)| SELECT * from company;select * from employee;select curtime()| call sp_TestProc(?,?,?)"; string wstr = ""; //make test data while (wstr.Length < 128 * 1024) { wstr += "广告做得不那么夸张的就不说了,看看这三家,都是正儿八经的公立三甲,附属医院,不是武警,也不是部队,更不是莆田,都在卫生部门直接监管下,照样明目张胆地骗人。"; } string str = ""; //make test data while (str.Length < 256 * 1024) { str += "The epic takedown of his opponent on an all-important voting day was extraordinary even by the standards of the 2016 campaign -- and quickly drew a scathing response from Trump."; } CDBVariantArray vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set vData.Add(1); vData.Add("Google Inc."); vData.Add("1600 Amphitheatre Parkway, Mountain View, CA 94043, USA"); vData.Add(66000000000.0); vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(254000.0); vData.Add(1); vData.Add(1.4); vData.Add(0); //second set vData.Add(2); vData.Add("Microsoft Inc."); vData.Add("700 Bellevue Way NE- 22nd Floor, Bellevue, WA 98804, USA"); vData.Add(93600000000.0); vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(str); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(str); vData.Add(20254000.0); vData.Add(2); vData.Add(2.5); vData.Add(0); //third set vData.Add(3); vData.Add("Apple Inc."); vData.Add("1 Infinite Loop, Cupertino, CA 95014, USA"); vData.Add(234000000000.0); vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(6254000.0); vData.Add(0); vData.Add(4.5); vData.Add(0); } CMysql.DRows r = (handler, rowData) => { //rowset data come here int last = ra.Count - 1; KeyValuePair <CDBColumnInfoArray, CDBVariantArray> item = ra[last]; item.Value.AddRange(rowData); }; CMysql.DRowsetHeader rh = (handler) => { //rowset header comes here KeyValuePair <CDBColumnInfoArray, CDBVariantArray> item = new KeyValuePair <CDBColumnInfoArray, CDBVariantArray>(handler.ColumnInfo, new CDBVariantArray()); ra.Add(item); }; //first, execute delete from employee;delete from company //second, three sets of INSERT INTO company(ID,NAME,ADDRESS,Income)VALUES(?,?,?,?) //third, three sets of insert into employee(CompanyId,name,JoinDate,image,DESCRIPTION,Salary)values(?,?,?,?,?,?) //fourth, SELECT * from company;select * from employee;select curtime() //last, three sets of call sp_TestProc(?,?,?) bool ok = mysql.ExecuteBatch(tagTransactionIsolation.tiUnspecified, sql, vData, er, r, rh, (h) => { //called before rh, r and er //ra.Clear(); }, null, tagRollbackPlan.rpDefault, (h, canceled) => { //called when canceling or socket closed if client queue is NOT used }, "|"); return(vData); }
public bool SendUserMessage(object message, string userId) { using (CScopeUQueue su = new CScopeUQueue()) { byte[] msg = su.Save(message).m_bytes; unsafe { fixed (byte* data = msg) { IntPtr m = new IntPtr(data); return ClientCoreLoader.SendUserMessage(m_cs.Handle, userId, m, su.UQueue.GetSize()) != 0; } } } }
public bool Publish(object Message, uint[] groups) { if (groups == null || groups.Length == 0) throw new ArgumentException("Must specify an array of group identification numbers"); using (CScopeUQueue su = new CScopeUQueue()) { byte[] msg = su.Save(Message).m_bytes; unsafe { fixed (byte* message = msg) { IntPtr m = new IntPtr(message); fixed (uint* grps = groups) { IntPtr g = new IntPtr(grps); return ClientCoreLoader.Speak(m_cs.Handle, m, su.UQueue.GetSize(), g, groups.Length) != 0; } } } } }
static void InsertBLOBByPreparedStatement(CSqlite sqlite, List<KeyValuePair<CDBColumnInfoArray, CDBVariantArray>> ra) { string wstr = ""; while (wstr.Length < 128 * 1024) { wstr += "广告做得不那么夸张的就不说了,看看这三家,都是正儿八经的公立三甲,附属医院,不是武警,也不是部队,更不是莆田,都在卫生部门直接监管下,照样明目张胆地骗人。"; } string str = ""; while (str.Length < 256 * 1024) { str += "The epic takedown of his opponent on an all-important voting day was extraordinary even by the standards of the 2016 campaign -- and quickly drew a scathing response from Trump."; } string sqlInsert = "insert or replace into employee(EMPLOYEEID, CompanyId, name, JoinDate, image, DESCRIPTION, Salary) values(?, ?, ?, ?, ?, ?, ?);select * from employee where employeeid = ?"; bool ok = sqlite.Prepare(sqlInsert, (handler, res, errMsg) => { Console.WriteLine("res = {0}, errMsg: {1}", res, errMsg); }); CDBVariantArray vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set of data vData.Add(1); vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(254000.0); vData.Add(1); //second set of data vData.Add(2); vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(str); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(str); vData.Add(20254000.0); vData.Add(2); //third set of data vData.Add(3); vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(6254000.0); vData.Add(3); } //send three sets of parameterized data in one shot for processing ok = sqlite.Execute(vData, (handler, res, errMsg, affected, fail_ok, id) => { Console.WriteLine("affected = {0}, fails = {1}, oks = {2}, res = {3}, errMsg: {4}, last insert id = {5}", affected, (uint)(fail_ok >> 32), (uint)fail_ok, res, errMsg, id); }, (handler, rowData) => { //rowset data come here int last = ra.Count - 1; KeyValuePair<CDBColumnInfoArray, CDBVariantArray> item = ra[last]; item.Value.AddRange(rowData); }, (handler) => { //rowset header comes here KeyValuePair<CDBColumnInfoArray, CDBVariantArray> item = new KeyValuePair<CDBColumnInfoArray, CDBVariantArray>(handler.ColumnInfo, new CDBVariantArray()); ra.Add(item); }); }
static void InsertBLOBByPreparedStatement(CSqlite sqlite, List <KeyValuePair <CDBColumnInfoArray, CDBVariantArray> > ra) { string wstr = ""; while (wstr.Length < 128 * 1024) { wstr += "广告做得不那么夸张的就不说了,看看这三家,都是正儿八经的公立三甲,附属医院,不是武警,也不是部队,更不是莆田,都在卫生部门直接监管下,照样明目张胆地骗人。"; } string str = ""; while (str.Length < 256 * 1024) { str += "The epic takedown of his opponent on an all-important voting day was extraordinary even by the standards of the 2016 campaign -- and quickly drew a scathing response from Trump."; } string sqlInsert = "insert or replace into employee(EMPLOYEEID, CompanyId, name, JoinDate, image, DESCRIPTION, Salary) values(?, ?, ?, ?, ?, ?, ?);select * from employee where employeeid = ?"; bool ok = sqlite.Prepare(sqlInsert, (handler, res, errMsg) => { Console.WriteLine("res = {0}, errMsg: {1}", res, errMsg); }); CDBVariantArray vData = new CDBVariantArray(); using (CScopeUQueue sbBlob = new CScopeUQueue()) { //first set of data vData.Add(1); vData.Add(1); //google company id vData.Add("Ted Cruz"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(254000.0); vData.Add(1); //second set of data vData.Add(2); vData.Add(1); //google company id vData.Add("Donald Trump"); vData.Add(DateTime.Now); sbBlob.UQueue.SetSize(0); sbBlob.Save(str); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(str); vData.Add(20254000.0); vData.Add(2); //third set of data vData.Add(3); vData.Add(2); //Microsoft company id vData.Add("Hillary Clinton"); vData.Add(DateTime.Now); sbBlob.Save(wstr); vData.Add(sbBlob.UQueue.GetBuffer()); vData.Add(wstr); vData.Add(6254000.0); vData.Add(3); } //send three sets of parameterized data in one shot for processing ok = sqlite.Execute(vData, (handler, res, errMsg, affected, fail_ok, id) => { Console.WriteLine("affected = {0}, fails = {1}, oks = {2}, res = {3}, errMsg: {4}, last insert id = {5}", affected, (uint)(fail_ok >> 32), (uint)fail_ok, res, errMsg, id); }, (handler, rowData) => { //rowset data come here int last = ra.Count - 1; KeyValuePair <CDBColumnInfoArray, CDBVariantArray> item = ra[last]; item.Value.AddRange(rowData); }, (handler) => { //rowset header comes here KeyValuePair <CDBColumnInfoArray, CDBVariantArray> item = new KeyValuePair <CDBColumnInfoArray, CDBVariantArray>(handler.ColumnInfo, new CDBVariantArray()); ra.Add(item); }); }