J'ai une table HolidayHome dans oracle db qui a un index db unique sur Id (je ne l'ai pas spécifié dans le code pour adapter/table/dataset, ne sais pas si je devrais/peut).pourquoi DbCommandBuilder (Oracle) produit étrange WHERE-clause à UpdateCommand?
DbDataAdapter.SelectCommand est comme ceci:
SELECT Id, ExtId, Label, Location1, Location2, Location3, Location4, ClassId, X, Y, UseType FROM HolidayHome
mais UpdateCommand généré par DbCommandBuilder a très étrange clause where:
UPDATE HOLIDAYHOME SET ID = :p1, EXTID = :p2, LABEL = :p3, LOCATION1 = :p4, LOCATION2 = :p5, LOCATION3 = :p6, LOCATION4 = :p7, CLASSID = :p8, X = :p9, Y = :p10, USETYPE = :p11 WHERE ((ID = :p12) AND ((:p13 = 1 AND EXTID IS NULL) OR (EXTID = :p14)) AND ((:p15 = 1 AND LABEL IS NULL) OR (LABEL = :p16)) AND ((:p17 = 1 AND LOCATION1 IS NULL) OR (LOCATION1 = :p18)) AND ((:p19 = 1 AND LOCATION2 IS NULL) OR (LOCATION2 = :p20)) AND ((:p21 = 1 AND LOCATION3 IS NULL) OR (LOCATION3 = :p22)) AND ((:p23 = 1 AND LOCATION4 IS NULL) OR (LOCATION4 = :p24)) AND (CLASSID = :p25) AND (X = :p26) AND (Y = :p27) AND (USETYPE = :p28))
tous ces domaines qui ont comme:
((:p17 = 1 AND LOCATION1 IS NULL) OR (LOCATION1 = :p18))
sont définis dans Oracle db comme ceci:
LOCATION1 VARCHAR2(30)
afin qu'ils permettent des valeurs nulles.
le code ressemble à ceci:
static bool CreateInsertUpdateDeleteCmds(DbDataAdapter dataAdapter) { DbCommandBuilder builder = _trgtProvFactory.CreateCommandBuilder(); builder.DataAdapter = dataAdapter; // Get the insert, update and delete commands. dataAdapter.InsertCommand = builder.GetInsertCommand(); dataAdapter.UpdateCommand = builder.GetUpdateCommand(); dataAdapter.DeleteCommand = builder.GetDeleteCommand(); }
quoi faire? Le UpdateCommand est une folie absolue.
Merci & Cordialement: Matti
oui. Je sais ce qu'est une clause where. edit: Personnellement, je pense que répondre «je ne sais vraiment pas ...» n'est pas une bonne pratique puisque maintenant la question n'est plus sans réponse. –
L'expression "Je ne sais vraiment pas le but ..." est parce que dans ce cas particulier, je ne sais pas ce que sont les types de colonnes, si elles sont valables, ni les valeurs des paramètres. Je n'ai pas expliqué ce qu'est une clause where, je vous ai expliqué pourquoi DbCommandBuilder génère une clause where qui peut ne pas apparaître comme la clause where typique lorsque vous effectuez une mise à jour. – uvita
vous avez raison, mais le savait déjà. de toute façon désolé à ce sujet. la chose que je ne sais toujours pas est celle-ci "((: p15 = 1 ET LABEL EST NUL) OU (LABEL =: p16))" - business. Tous ces champs acceptent une valeur nulle. edit: a donné un u-up vote. –