<div dir="ltr"><div dir="ltr"><div>Hello people.</div><div><br></div><div>I'm having an issue working with SQLite.</div><div><br></div><div>I have a particular function for insert a batch of data and return the number of affected rows:</div><div><br></div><div><span style="font-family:monospace">Public Function myInsert() as Integer</span></div><div><span style="font-family:monospace">' I have another function for create the connection, so</span></div><div><span style="font-family:monospace">Dim conn as Connection = getMyConnection()<br></span></div><div><span style="font-family:monospace"><br></span></div><div><div><span style="font-family:monospace">' I prepare a SQL with multiple INSERT, like:</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Dim sQuery As String[] = []<br></span></div><div><span style="font-family:monospace">sQuery.Push("INSERT INTO table (col1, col2, col3) VALUES (val11, val12, val13)")</span></div><div><span style="font-family:monospace">sQuery.Push("INSERT INTO table (col1, col2, col3) VALUES (val21, val22, val23)");</span></div><div><span style="font-family:monospace">sQuery.Push("INSERT INTO table (col1, col2, col3) VALUES (val31, val32, val33)");</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">' Since I have already a valid and opened connection, I just execute all my inserts in a single query call:</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">conn.Begin()<br></span></div><div><span style="font-family:monospace">Dim insertResult As Result = conn.Exec(sQuery.Join(";"))</span></div><div><span style="font-family:monospace">conn.Commit()</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Return insertResult.Count</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Catch<br></span></div><div><span style="font-family:monospace">  conn.Rollback()</span></div><div><span style="font-family:monospace">  Return -1<br></span></div></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">End</span><br></div><div><br></div><div>So, what I expect is that my function returns 3 and sees those 3 rows on my table. However, what I'm getting is, on the table, the 3 inserted rows; but on other hand, the "Catch" part is executed, returning my function -1 value. <br></div><div>I executed my program with a breakpoint just on "<span style="font-family:monospace">conn.Begin()</span>" call to see what is happening, and found that insertResult has the property Available as False, and the Count as 0.</div><div>Also, instead of returning the 0 from insertResult, as I said, the Catch part is executed, BUT the 3 inserted rows remain on the database.<br></div><div><br></div><div>I'm getting a bit confused with that.</div><div>Why could it be that if the Query is executed successfully, the Result is not?</div><div><br></div><div>Should I reconsider to use the "Result way" via the Connection.Create() call?</div><div><br></div><div>I try it. <br></div><div><br></div><div><div><span style="font-family:monospace">Public Function myInsert() as Integer</span></div><div><span style="font-family:monospace">' I have another function for create the connection, so</span></div><div><span style="font-family:monospace">Dim conn as Connection = getMyConnection()<br></span></div><div><span style="font-family:monospace"><br></span></div><div><div><span style="font-family:monospace">' I prepare a SQL with multiple INSERT, like:</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Dim data as Collection[] = []<br></span></div><div><span style="font-family:monospace">data.Push(["col1": val11, "col2": val12, "col3": val13])</span></div><div><span style="font-family:monospace">data.Push(["col1": val21, "col2": val22, "col3": val23])</span></div><div><span style="font-family:monospace">data.Push(["col1": val31, "col2": val32, "col3": val33])</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">conn.Begin()<br></span></div><div><span style="font-family:monospace">Dim insertResult As Result = conn.Create("table")</span></div><div><span style="font-family:monospace">For Each coll as Collection in data</span></div><div><span style="font-family:monospace">  For Each val as Variant in coll</span></div><div><span style="font-family:monospace">    insertResult[data.Key] = val<br></span></div><div><span style="font-family:monospace">  Next<br></span></div><div><span style="font-family:monospace">   insertResult.Update()</span></div><div><span style="font-family:monospace">Next<br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">conn.Commit()</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Return insertResult.Count</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Catch<br></span></div><div><span style="font-family:monospace">  conn.Rollback()</span></div><div><span style="font-family:monospace">  Return -1<br></span></div></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">End</span></div></div><div><br></div><div>By this approach the function returns 1. However, I think that this is calling an INSERT CALL for each iteration. With 3 rows its OK, but what if I have 10000 rows to insert? Can be the performance down by that way instead of a single .Exec() call? Or doesn't matter since it is inside a transaction?<br></div><div>Why the .Count property does not change?</div><div><br></div><div>Thank you all for your time and answers. :)<br></div><div><br></div></div></div>