[C#] dynamic query building

Pagina: 1
Acties:

  • *Dutch-Force*
  • Registratie: December 2001
  • Laatst online: 07-06-2024
Ik wil graag vanuit een xml file een database updaten.
Ik loop via een lus alle kolommen(+ de waarde die erbij hoort) door die ik in de database wil hebben.
Ik heb daarvoor een InsertCommand gemaakt zie onderstaand, het probleem is echter dat ik deze query dynamisch wil laten opbouwen zodat deze functie voor alle tabellen / xml files te gebruiken is.
ik heb al aardig wat gezocht maar alle voorbeelden die ik tegen kom hebben vaste parameters in de query staan.
Wie kan mij hiermee op weg helpen, ik hoef natuurlijk geen compleet uitgewerkt stuk code, maar een duw in de richting waar ik moet kijken zou heel prettig zijn.

Thanx

code:
1
2
3
4
5
6
7
8
9
10
11
stTableAdapter.InsertCommand = new OleDbCommand("INSERT INTO SYSTEM_TUNING" +
                "(Systemnumber, [Group], Ref, Parm_value, [Date], Result, Key_value ) VALUES " +
                "(@srn, @group, @ref, @parm_value, @date, @result, @key_value)", cn);

            stTableAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@srn", OleDbType.VarChar, 30, "Systemnumber"));
            stTableAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@group", OleDbType.VarChar, 30, "Group"));
            stTableAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@ref", OleDbType.VarChar, 30, "Ref"));
            stTableAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@parm_value", OleDbType.VarChar, 50, "Parm_value"));
            stTableAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@date", OleDbType.VarChar, 50, "Date"));
            stTableAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@result", OleDbType.Char, 15, "Result"));
            stTableAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@key_value", OleDbType.Integer, 6, "Key_value"));

[ Voor 7% gewijzigd door *Dutch-Force* op 16-11-2004 11:51 ]

ComputerSpecs


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 15:52
Wat is het probleem dan? Je OleDbCommand is in principe gewoon een string, functies zat om strings te bewerken.

Roomba E5 te koop


  • *Dutch-Force*
  • Registratie: December 2001
  • Laatst online: 07-06-2024
owkeej dus ik laat in een loop waarin ik uit de xml alle kolommen haal appenden aan de string .
Daaarna doe ik hetzelfde voor de values(@+naam van kolom).

de reden waarom ik deze misschien wat omslachtige methode gebruik is omdat als je een xml in een dataset leest alle types string zijn, dit correspondeert natuurlijk niet met de database.

Waar ik ook aan zat te denken is om de xml in te lezen aan de hand van het aan de database opgevraagde schema.
Weet iemand hier misschien meer over?

ComputerSpecs


Verwijderd

Ik krijg niet de indruk dat je weet wat je aan het doen bent. Ik zou zeggen, splits het probleem op in deelproblemen. Schrijf een stukje testcode dat waarden uitleest uit XML. Voorbeelden genoeg op internet. Schrijf daarna los daarvan een stukje code dat regels toevoegt in een database. Ook genoeg voorbeelden op internet. Kijk of je die twee stukken code met elkaar kunt integreren tot 1 geheel. En ga daarna pas eens een keer nadenken over het gebruik van prepared statements mocht je die nog nodig hebben. Je hoeft niet per se een SQL INSERT query te schrijven met ADODB, je kunt ook denken aan de AddNew methode op een recordset, gevolgd door specificatie van waarden en een Update.

Als je in dit proces tegen een concreet probleem oploopt, is het gemakkelijker om hulp te krijgen dan met zo'n algemene en rommelig geformuleerde vraag als dit.

  • *Dutch-Force*
  • Registratie: December 2001
  • Laatst online: 07-06-2024
ik weet wel zeker wat ik aan het doen ben, misschien dat dat niet overkomt maar ik zal het probleem dan verder proberen uit te leggen.

Ik krijg een xml file aangeleverd, deze "parse" ik door middel van een aantal methodes naar een xml die correspondeert met de inhoud van de tabel in de database.

Zoals jij het beschrijft doe ik het ook, eerst dataset klaar maken vanuit xml deze updaten naar de database.

maar ik wil dus een query maken die die dataset insert in een tabel in de database, de reden waarom ik een dynamische wil is omdat sommige tabellen +/- 100 kolommen hebben zoals het 'hard' gecodeerd staat werkt het ook maar dat wil ik dus niet.

ComputerSpecs


Verwijderd

Dat is ietsjes helderder.

Hoe kom je aan 100 kolommen? Duidt dat niet op een gebrek aan normalisatie?

[ Voor 30% gewijzigd door Verwijderd op 16-11-2004 13:57 ]


  • *Dutch-Force*
  • Registratie: December 2001
  • Laatst online: 07-06-2024
het gaat om mri scan systemen, die dingen hebben heel veel eigenschappen.

// offtopic Sommige dingen zijn juist al gedenormaliseerd voor performance redenen

maar fijn dat het nu wat helderder is, ik heb de suggestie gebruikt om eerst de
string te maken en dit werkt, dus dat zou al een oplossing zijn..

maar ik hoop dat er misschien meer oplossingen voor zijn zodat ik de beste kan kiezen

//edit

nog even de reden aanhalen waarom ik zon query wil maken: ik heb een tabel n de database die gevuld moet worden door 2 xml files, het probleem is dat als ik die autogenerated commands gebruik het bij de eerst file goed gaat maar als de 2e file in de tabel moet komen hij zegt dat er een key confilct is, dit "klopt" ook want het gaat over dezelfde machine, maar hij zou dan een update query moeten doen en niet een insert. weet iemand misschien hoe dat komt dat ie zonder zelf gemaakt command hij altijd de insert wilt aanroepen?

[ Voor 42% gewijzigd door *Dutch-Force* op 16-11-2004 14:43 ]

ComputerSpecs


Verwijderd

_Dutch-Force_ schreef op dinsdag 16 november 2004 @ 14:37:
nog even de reden aanhalen waarom ik zon query wil maken: ik heb een tabel n de database die gevuld moet worden door 2 xml files, het probleem is dat als ik die autogenerated commands gebruik het bij de eerst file goed gaat maar als de 2e file in de tabel moet komen hij zegt dat er een key confilct is, dit "klopt" ook want het gaat over dezelfde machine, maar hij zou dan een update query moeten doen en niet een insert. weet iemand misschien hoe dat komt dat ie zonder zelf gemaakt command hij altijd de insert wilt aanroepen?
Misschien mis ik totaal je vraag, maar in je openingspost zie ik dat je een insert probeerd uit te voeren.
Heb verder niet zoveel kaas gegeten van die OleDbCommands (waarom btw een OleDB connectie? ga ej naar access schrijven??), maar InsertCommand, ziet er uit als het command wat hij moet uitvoeren bij een insert. Er is ook een updatecommand.

Volgens mij zijn deze methods bedoeld voor dataadapters die je wat langer wilt behouden of aan controls wilt knopen. Misschien ben jij beter af met zelf een query opbouwen (indien SQL Server een Stored Procedure) en dan eerst ff chekcn of je al een record hebt, dan de update doen en anders de insert

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:10
Verwijderd schreef op dinsdag 16 november 2004 @ 22:12:
[...]

Misschien ben jij beter af met zelf een query opbouwen (indien SQL Server een Stored Procedure) en dan eerst ff chekcn of je al een record hebt, dan de update doen en anders de insert
Ik denk niet dat het handig is om in een stored procedure dynamisch een query te gaan opbouwen.
In dit geval kan je - ook als je Sql Server gebruikt- het best af zijn met een dynamische query.

https://fgheysels.github.io/


  • *Dutch-Force*
  • Registratie: December 2001
  • Laatst online: 07-06-2024
de reden waarom ik ole gebruik is omdat de sql database nog niet is ingericht en ik dus effe een access db heb gemaakt waarmee ik kan oefenen.
maar zoals ik het nu met de string aanpassen heb gedaan werkt best goed.

ik kan dus nu dynamisch queries bouwen en de parameters adden.

ComputerSpecs


Verwijderd

_Dutch-Force_ schreef op woensdag 17 november 2004 @ 11:30:
de reden waarom ik ole gebruik is omdat de sql database nog niet is ingericht en ik dus effe een access db heb gemaakt waarmee ik kan oefenen.
maar zoals ik het nu met de string aanpassen heb gedaan werkt best goed.

ik kan dus nu dynamisch queries bouwen en de parameters adden.
installeer je toch zelf ff de MSDE en haal je de SQL CLient tools van de SQL Server CD....

ben je zo heel rap klaar
Pagina: 1