Yes, this test case illustrate the problem. Thank you! Pietro On Apr 26, 2:20 pm, Anders <[email protected]> wrote: > On Apr 26, 12:05 pm, Pietro <[email protected]> wrote: > > > i've found a bug on the last release of DBLinq when i try to update an > > entity using Oracle and ODP.NET. > > > ODP.NET have a problem with OracleCommand and its parameters, the > > command don't find parameters by ID but only by Name, so when we try > > to update a field on a table and dblinq generate the sql command with > > the parameters the ExecuteNonQuery don't through and don't update > > nothing. > > Thanks for reporting this. To make sure, we are talking about the same > thing: Does this test case illustrate the problem or do you have > another test case? > > using (var context = new ReadTest().CreateDB()) { > var c = context.Categories.First(); > c.CategoryName += "!"; > context.SubmitChanges(); > > } > > When run from Program3Ora.cs in DbLinq.Oracle_test_odp, it attempts to > execute two queries, but fails during the second with the error > "ORA-01722: invalid number" (probably because "Beverages!" isn't a > number): > > SELECT LimitedTable___.*, rownum Limit___ FROM ( > SELECT "CategoryID", "CategoryName", "Description", "Picture" > FROM "NORTHWIND"."Categories" > ) LimitedTable___ WHERE rownum <= 1 > > UPDATE "NORTHWIND"."Categories" SET "CategoryName" = :CategoryName > WHERE "CategoryID" = :CategoryID > -- :CategoryID: Input Decimal (Size = 0; Prec = 0; Scale = 0) [1] > -- :CategoryName: Input String (Size = 0; Prec = 0; Scale = 0) > [Beverages!] > > Adding your change (simplified a bit) seem to solve the problem: > > Index: DatabaseContext.cs > =================================================================== > --- DatabaseContext.cs (revision 1408) > +++ DatabaseContext.cs (working copy) > @@ -117,6 +117,12 @@ > public IDbCommand CreateCommand() > { > IDbCommand command = Connection.CreateCommand(); > + if (command.GetType().FullName == > "Oracle.DataAccess.Client.OracleCommand") > + { > + var p = command.GetType().GetProperty("BindByName"); > + if (p != null) > + p.SetValue(command, true, null); > + } > if (command.Transaction == null) > command.Transaction = CurrentTransaction; > return command; > > -- > Anders > > -- > You received this message because you are subscribed to the Google Groups > "DbLinq" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group > athttp://groups.google.com/group/dblinq?hl=en.
-- You received this message because you are subscribed to the Google Groups "DbLinq" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/dblinq?hl=en.
