Ey, ik heb de volgende query in MSSQL, deze haalt de data uit 1 tabel en herhaald zichzelf steeds. Hierdoor heb ik een DataTable met 3 kolommen, marketGroupID, parentGroupID en marketGroupName.
Het probleem dat ik nu heb is dat ik hierdoor heen wil lopen en de childs van de parent in een array zetten. De array moet er dan zo uitzien (php voorbeeld omdat ik niet weet hoe ik dit in C# moet doen)
Dit is al wat ik heb, niet veel maar hier kan ik alles uitlezen. De eerste rijen hebben dus parentGroupID 204, dit zijn de parents en moeten als eerste in de array staan, daarna moet ik dus de records vinden waarvan de parentGroupID gelijk is aan de marketGroupID van de parent record etc. Hoop dat iemand me kan helpen, zonder voor vage uitleg soms.
Want ik wil data uit de MSSQL database in een SQLite database zetten maar omdat de tabel van de MSSQL database anders is opgebouwd zoals ik in de beginpost zei wil ik eerst de data in een array zetten, zodat ik het makkelijker kan toevoegen in de SQLite applicatie.
Ik heb wel een C# voorbeeldje hoe ik dit normaal opbouw... Ik gebruik het normaal om een datatable om te parsen naar stringelementen om ze laten in javascript te laden en een grid te vullen.. Maar ik denk dat je met deze code wel voorruit kan.
DataTable dt = _Uren.Fill(); // Ik gebruik hier een fill gekoppeld aan een storedprocedure. Hier ook je vooraf gegenereede datatable inzetten.
int items = dt.Rows.Count; // Rows tellen
int columns = dt.Columns.Count; //Colums tellen
string array = ""; //string definieren voor je je data in gaat zetten. Je kan hier ook een Array voor gebruiken.
for (int i = 0; i < items; i++)
{
array += "[";
for (int i = 0; i < items; i++)
{
array += "["; //de array begint met een "["
for (int c = 0; c < columns; c++)
{
object t = dt.Rows[i][c].GetType().ToString(); //hiermee zoek je het type uit. ivm het parsen van de data. Een string of datatime object zal worden geparsen tussen quotes, een int zonder quotes
if ((string)t == "System.String")
array += "'" + dt.Rows[i][c] + "',";
else if ((string)t == "System.Boolean")
{
bool geaccordeerd = (bool)dt.Rows[i][c];
if (geaccordeerd == true)
array += 1 + ",";
else
array += 0 + ",";
}
else if ((string)t == "System.DateTime")
{
array += "'" + ((DateTime)dt.Rows[i][c]).ToShortDateString() + "',"; //Je kan hier natuurlijk diverse formaten kiezen.
}
else
array += dt.Rows[i][c] + ",";
}
array = array.Remove(array.Length - 1, 1);
array += "],";
}
array = array.Remove(array.Length - 1, 1);
//array zal nu een string bevatten waarin alle records worden onderscheiden met [].
//voorbeeld:
// [['testdata', 1, 2, '01-01-1990'],['testdata 2', 2, 2, '01-01-1990']]
DataTable dt = _Uren.Fill();// Ik gebruik hier een fill gekoppeld aan een storedprocedure. Hier ook je vooraf gegenereede datatable inzetten.
int items = dt.Rows.Count;// Rows tellen
int columns = dt.Columns.Count;//Colums tellen
string array ="";//string definieren voor je je data in gaat zetten. Je kan hier ook een Array voor gebruiken.
for(int i =0; i < items; i++)
{
array +="[";
for(int i =0; i < items; i++)
{
array +="[";//de array begint met een "["
for(int c =0; c < columns; c++)
{
object t = dt.Rows[i][c].GetType().ToString();//hiermee zoek je het type uit. ivm het parsen van de data. Een string of datatime object zal worden geparsen tussen quotes, een int zonder quotes
if((string)t =="System.String")
array +="'"+ dt.Rows[i][c]+"',";
elseif((string)t =="System.Boolean")
{
bool geaccordeerd =(bool)dt.Rows[i][c];
if(geaccordeerd ==true)
array +=1+",";
else
array +=0+",";
}
elseif((string)t =="System.DateTime")
{
array +="'"+((DateTime)dt.Rows[i][c]).ToShortDateString()+"',";//Je kan hier natuurlijk diverse formaten kiezen.
}
else
array += dt.Rows[i][c]+",";
}
array = array.Remove(array.Length-1, 1);
array +="],";
}
array = array.Remove(array.Length-1, 1);
//array zal nu een string bevatten waarin alle records worden onderscheiden met [].
Een tweede optie is om je MSSQL query uit te breiden en deze al te laten selecten. Je kan de output dus aanpassen.
Ik zou me, als ik jou was, wel eens gaan verdiepen in het werken met stored procodures en eventueel je data afvangen in een losse classe (Data Acces Layer).
Bedankt voor je code, ik zal vanavond even gaat testen. Wat bedoel je met de optie om MSSQL query uit te breiden?
Tevens moet ik dit eenmalig doen en eventueel om de maand om de nieuwste data te krijgen, maar voor de rest heb ik de MSSQL database niet meer nodig in mijn applicatie.
Je kan door je query aan te passen, de manier waarop MSSQL zijn data output beinvloeden. Om een voorbeeld te geven:
Ik draai op dit moment een javascriptapplicatie waarin d.m.v. AJAX een grid gevuld wordt. De data vanuit mijn database (een vrij complexe tabel) moet dus worden omgezet naar een array. Ik deed dit voorheen met de bovenstaande code. Nu heb ik mijn stored procudure dus danig aangepast dat hij de rows al als string aanleverd. Ik hoef dus in C# alleen de rijen nog maar aan elkaar te plakken d.m.v. een ordinaire for loop.
Ja, jij verplaatst het C# gedeelte als het ware naar de MSSQL. Het punt is dat de tabel die ik moet uitlezen recursief is ingedeeld, dus alle parent en childs zitten in dezelfde tabel, maar wat ik wil in mijn tabel is de childs van de parent in een nieuwe kolom ipv nieuwe rij. Kan maximaal 5x diep dus dat is geen probleem.
in principe moet dat wel lukken... ik wil je er wel mee helpen. even exact laat weten hoe je tabel er nu uit ziet en wat je nieuwe formaat moet worden... Tabelnamen, soort data, eventuele afhankelijkeheden uit andere tabellen, etc. Dan zal ik kijken of ik de query voor je kan schrijven.
Je kan me eventueel ook toevoegen op msn al je dat makkelijker vind. msn adres staat in mijn profiel.