C# & MySQL: Parameterized select query

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • umask
  • Registratie: April 2019
  • Laatst online: 21-02-2022
Beste Tweakenaars,

Ik zit met een probleem. Hiervoor heb ik ook heel veel bronnen gezocht om eventueel een antwoord te kunnen vinden, maar tot op heden is het me niet gelukt het voor elkaar te krijgen.

Waar ik naar streef is om data op te halen van mijn database en deze vervolgens te tonen op een Datagrid binnen een WPF applicatie. Ik weet btw dat ik hier een oude methode gebruik en dergelijke, maar ik doe dit puur om te oefenen van hoe het vroeger in zijn werking ging..

// Select Query
MySQL:
1
string sqlSearchBox = "SELECT credits.cID, credits.cName, IFNULL(SUM(Products.total), 0) AS pTotal, credits.cText FROM credits LEFT JOIN Products ON credits.cID = Products.cID WHERE credits.cID LIKE '@sqlSearch' GROUP BY credits.cID, credits.cName, credits.cText ORDER BY credits.cID";


// Populating records into DataGrid
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
try
{
    cmd = new MySqlCommand(sqlSearchBox, SQLDatabase.Connection());
    SQL.sqlDataTable = new DataTable();
    new MySqlDataAdapter(cmd).Fill(SQL.sqlDataTable);
    cmd.Parameters.Add(new MySqlParameter("@sqlSearch", txtcSearch.Text));
    myDataGrid.ItemsSource = SQL.sqlDataTable.DefaultView;
}

catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}


Daarnaast zijn alle tips en tops altijd welkom :)

Edit: 18-06-2019 09:12 Het probleem is opgelost!
Van @RobIII heb ik een aantal tips gekregen, omdat ik hem hiervoor persoonlijk had benaderd. Wat eigenlijk niet de bedoeling was en hij me erop attendeerde om hiervoor een topic te starten.

Aangepaste C#-code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
try
{
    cmd = new MySqlCommand(sqlSearchBox, SQLDatabase.Connection());
    SQL.sqlDataTable = new DataTable();
    cmd.Parameters.Add(new MySqlParameter("@sqlSearch", txtcSearch.Text)); //<= This part has moved!
    new MySqlDataAdapter(cmd).Fill(SQL.sqlDataTable);
    myDataGrid.ItemsSource = SQL.sqlDataTable.DefaultView;
}

catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}


Na het aanpassen van de C#-code werkte de oplossing jammer genoeg niet meteen. Ik ben er zelf achtergekomen dat de quotes in de MySQL-query van '@sqlSearch' in dit geval niet nodig zijn, waardoor de query niet goed werkte en heb ik Like vervangen door een =, omdat ik een exacte waarde nodig heb. De aangepaste MySQL-query:
MySQL:
1
string sqlSearchBox = "SELECT credits.cID, credits.cName, IFNULL(SUM(Products.total), 0) AS pTotal, credits.cText FROM credits LEFT JOIN Products ON credits.cID = Products.cID WHERE credits.cID = @sqlSearch GROUP BY credits.cID, credits.cName, credits.cText ORDER BY credits.cID";

[ Voor 33% gewijzigd door umask op 18-06-2019 10:56 ]