Eroare de distribuție specificată nu este validă în C# (Programare, C#, Mysql, Winforms, Turnare)

Ameena a intrebat.

Cum pot rezolva acest lucru?

MySqlConnection con = new MySqlConnection(myconnectionstring);
string validateinventory = "SELECT COUNT(*) FROM inventory_register WHERE barcode = @barcode";

MySqlCommand cmd = new MySqlCommand(validateinventory,con);

con.Open();
cmd.Parameters.AddWithValue("@barcode", textBox3.Text);
int Result = (int)cmd.ExecuteScalar();
con.Close();

if (Result > 0)
{
    textBox3.Text = "";
    MessageBox.Show("Invalid Barcode! Please Register Inventory or Enter Valid Barcode");
}

O excepție InvalidCastException este aruncată în următoarea linie:

int Result = (int)cmd.ExecuteScalar();

Comentarii

  • Poate că ar trebui să precizați eroarea pe care o primiți și pe ce linie. –  > Por Omri Aharon.
  • Bună.Primesc eroarea în linia „int result = (int)cmd.executescalar(); –  > Por Ameena.
  • @Ameena Sunteți sigur că rezultatul din ExecuteScalar() este o valoare întreagă? Ce spune debuggerul? –  > Por Andy.
  • posibil duplicat al erorii Specified cast is not valid folosind C# –  > Por VMAtm.
  • Care este valoarea reală de returnare din ExecuteScalar? –  > Por Mike Perrenoud.
1 răspunsuri
VMAtm

Încercați să depanați un astfel de cod:

object Result = cmd.ExecuteScalar();

Cred că acest lucru va fi un decimal, , dar depinde de comportamentul MySQL. Iar în C# nu poți pur și simplu să convertești un double în int, , dacă este boxat. Trebuie doar să obțineți tipul corect și să îl convertiți în el, și abia după aceea puteți converti în int, , astfel:

int Result = (int)(decimal)cmd.ExecuteScalar();

De asemenea, puteți obține object prin intermediul var și să folosiți cuvântul cheie Convert clasa:

var objectResult = cmd.ExecuteScalar();
int Result = Convert.ToInt32(objectResult);

Comentarii

  • În C#, nu puteți în niciun caz să transformați în mod explicit un dublu într-un întreg. De ce ar trebui să COUNT să returneze un dublu? –  > Por Frank.
  • @Frank decimal sau double va arunca o excepție în context verificat, deoarece double valoarea este boxată și trebuie să fie convertită în tipul său real înainte. Acesta este un duplicat: stackoverflow.com/a/14944290/213550 –  > Por VMAtm.
  • @Frank Am actualizat răspunsul. –  > Por VMAtm.
  • @VMAtm vă mulțumesc. acum problema vine la condiția if, cum ar trebui să verific dacă valoarea Rezultatului nu este nulă sau nulă (>0 sau =0) –  > Por Ameena.