Hoi Allen,
Daar ik tracht wat bij te leren in VB.NET gecombineerd met MySQL zit ik nu toch met iets waarvan ik dacht dat het simpel zou zijn
maar ik zie helaas m'n fout niet
Simpel uitgelegd, ik heb een VB.NET Form met een labeltje op, dit moet de decimale waarde weergeven die zich in de database bevindt.
Echter lukt het me wel als ik de query uitvoer vanuit .NET maar niet als ik een stored procedure aanroep.
Mijn code (testcode) ziet eruit als volgt:
[Stored Procedure (MySQL 8.x)]
Code in VB.NET waarmee het wel werkt:
Hier maak ik me een beetje zorgen over de ValueX die ik gebruik als Double, ik las hier verschillende zaken over de precisie van de getallen als je de functie SUM bv gaat gebruiken?
En ik had dit uiteraard ook graag aangeroepen vanuit de stored procedure ipv. de query in VB.NET te schrijven.
Ik begrijp inmiddels dat ik de waarde moet gaan converteren maar hier kom ik vast te zitten.
Ik heb zaken geprobeerd als double etc met de niet werkende code, hier begint hij dan met afronden naar boven of beneden bv. 9.33 wordt dan 9 of 9.51 wordt dan 10.
In de table zelf staat de waarde ook op DECIMAL(11,2)
Verder nog een kleine opmerking als ik in de Stored Procedure DECIMAL(11,2) vervang naar DECIMAL(11.2) dan krijg ik geen foutmelding meer over het formaat maar rond hij weer af en toont hij gewoonweg 9 of 10 naargelang wat er achter de comma staat in de database.
Hebben jullie hier ervaring mee?
Mvg,
Steven
Daar ik tracht wat bij te leren in VB.NET gecombineerd met MySQL zit ik nu toch met iets waarvan ik dacht dat het simpel zou zijn


Simpel uitgelegd, ik heb een VB.NET Form met een labeltje op, dit moet de decimale waarde weergeven die zich in de database bevindt.
Echter lukt het me wel als ik de query uitvoer vanuit .NET maar niet als ik een stored procedure aanroep.
Mijn code (testcode) ziet eruit als volgt:
[Stored Procedure (MySQL 8.x)]
SQL:
1
2
3
4
5
6
7
| PROCEDURE `GetValues`(OUT VALUE_RESULT Decimal(11,2)) BEGIN SET VALUE_RESULT = (SELECT SUM(`SomeTable`.`Value`) FROM `TESTDB`.`SomeTable`); IF (VALUE_RESULT IS NULL) THEN SET VALUE_RESULT = 0.00; END IF; END |
Visual Basic .NET:
Ik krijg telkens een foutmelding weer dat de input string niet in een correct formaat is, daarop heb ik geprobeerd Format zowel in VB.NET als in de Stored Procedure.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| MySQLCmd.Connection = MySQLCon MySQLCmd.CommandText = "GetValues" MySQLCmd.CommandType = CommandType.StoredProcedure MySQLCmd.Parameters.AddWithValue("@VALUE_RESULT", MySqlDbType.Decimal) MySQLCmd.Parameters("@VALUE_RESULT").Direction = ParameterDirection.Output Try MySQLCon.Open() MySQLDR = MySQLCmd.ExecuteReader MySQLDR.Read() Label1.Text = MySQLDR(0) MySQLCmd.Parameters.Clear() MySQLCmd.Dispose() MySQLDR.Close() MySQLDR.Dispose() MySQLCon.Close() MySQLCon.Dispose() Catch ex As Exception MessageBox.Show(ex.ToString) End Try |
Code in VB.NET waarmee het wel werkt:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Try Dim ValueX As Double MySQLCmd.CommandText = "SELECT SUM(Value) FROM SomeTable" MySQLCmd.Connection = MySQLCon MySQLCon.Open() MySQLDR = MySQLCmd.ExecuteReader While MySQLDR.Read ValueX = MySQLDR.GetValue(0) End While Label1.Text = ValueX MySQLCon.Close() Catch ex As Exception MessageBox.Show(ex.Message) End Try |
Hier maak ik me een beetje zorgen over de ValueX die ik gebruik als Double, ik las hier verschillende zaken over de precisie van de getallen als je de functie SUM bv gaat gebruiken?
En ik had dit uiteraard ook graag aangeroepen vanuit de stored procedure ipv. de query in VB.NET te schrijven.
Ik begrijp inmiddels dat ik de waarde moet gaan converteren maar hier kom ik vast te zitten.
Ik heb zaken geprobeerd als double etc met de niet werkende code, hier begint hij dan met afronden naar boven of beneden bv. 9.33 wordt dan 9 of 9.51 wordt dan 10.
In de table zelf staat de waarde ook op DECIMAL(11,2)
Verder nog een kleine opmerking als ik in de Stored Procedure DECIMAL(11,2) vervang naar DECIMAL(11.2) dan krijg ik geen foutmelding meer over het formaat maar rond hij weer af en toont hij gewoonweg 9 of 10 naargelang wat er achter de comma staat in de database.
Hebben jullie hier ervaring mee?
Mvg,
Steven
[Voor 5% gewijzigd door RobIII op 06-11-2018 12:11. Reden: Code tags toegevoegd]