ADO.NET INSERT/UPDATE RETURNING statement question
(1) By leisaupei on 2021-08-17 11:13:49
Hello, I have a few question when i using INSERT/UPDATE RETURNING statement. ``` sql CREATE TABLE "test" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" text ); INSERT INTO "test"("name") VALUES ('johnny') RETURNING "id","name"; UPDATE "test" as a set "name" = 'SAM' WHERE (a."id" = 1) RETURNING "id","name"; ``` It worked, but 1. The return value of [RecordsAffected] at System.Data.SQLite.SQLiteDataReader *is -1*, So I don't know how to judge thas rows has been affected. 2. The return columns at System.Data.SQLite.SQLiteDataReader names '"id"' and '"name"', *Column names containing quotation marks('"')*, but this problem does not appear in SELECT statement. Are they correct or should they be? SQLite version is ``3.55.5`` Nuget Package is: ``` <PackageReference Include="System.Data.SQLite.Core" Version="1.0.114.3" /> ```
(2) By Simon Slavin (slavin) on 2021-08-18 01:22:18 in reply to 1 [link]
<pre>sqlite> .mode table sqlite> INSERT INTO "test"("name") VALUES ('johnny2') RETURNING id,name; +----+---------+ | id | name | +----+---------+ | 4 | johnny2 | +----+---------+ sqlite> INSERT INTO "test"("name") VALUES ('johnny3') RETURNING "id","name"; +----+---------+ | id | name | +----+---------+ | 6 | johnny3 | +----+---------+ </pre> I suspect this bug, if it is a bug, is in System.Data.SQLite . You have posted useful version numbers, so someone familiar with it should be able to help.
(3) By leisaupei on 2021-08-18 02:10:09 in reply to 2 [link]
What about the return value of RecordsAffected at System.Data.SQLite.SQLiteDataReader is -1 question? Is that what you designed or is it a bug? ``` C# var affrows = 0; long id = 0; string name = null; using (var conn = new SQLiteConnection(MainConnectionString)) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = @"UPDATE ""test"" AS a SET ""name"" = 'Sam' WHERE (a.""id"" = 1) RETURNING id,name"; var reader = cmd.ExecuteReader(); while (reader.Read()) { id = Convert.ToInt64(reader["id"]); name = reader["name"].ToString(); } affrows = reader.RecordsAffected; // result is -1. } ```