无效的Cast异常是unHandled MySQL

时间:2016-01-26 08:11:45

标签: c# mysql sql

当我运行程序时,我收到此错误:

  

无效的Cast Exception是未处理的

这是填充数据库的表单的一部分,visual Studio将int cast标记为错误

MySqlConnection conectar = new MySqlConnection("server=127.0.0.1; database=gymne; Uid=root; pwd=0000000000;");
using (MySqlCommand sqlCommand = new MySqlCommand("SELECT COUNT(*) from Socios where Nombre like @pNombre AND Apellido like @pApellido", conectar))
{
     conectar.Open();
     sqlCommand.Parameters.AddWithValue("@pNombre", txtNombre.Text);
     sqlCommand.Parameters.AddWithValue("@pApellido", txtApellido.Text);
     int UsuarioExiste = (int)sqlCommand.ExecuteScalar();//<----"error here" 
     if (UsuarioExiste > 0)
     {
         MessageBox.Show("El Socio ya existe!!", "No Guardado", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }

2 个答案:

答案 0 :(得分:3)

问题是ExecuteScalar在MySql中返回Int64而不是Int32。因此,当您使用显式转换

时,无效转换

通过转换,您的错误应该消失

 int UsuarioExiste = Convert.ToInt32(sqlCommand.ExecuteScalar());

You are not alone陷入这个问题

当然,SonerGönül先生在答案中所说的一切仍然适用,应该尽快完成。

答案 1 :(得分:2)

强烈怀疑,您以错误的方式参数化LIKE部分。您至少需要使用%..%来确定您尝试获取包含这些字符串的值。等;

sqlCommand.Parameters.AddWithValue("@pNombre", "%" + txtNombre.Text + "%");
sqlCommand.Parameters.AddWithValue("@pApellido", "%" + txtApellido.Text + "%");

请尽可能多地使用AddWithValueIt may generate unexpected and surprising results sometimes。使用Add方法重载来指定参数类型及其大小。

还可以使用using statement自动处理您的连接和命令,而不是手动调用(在某些地方可能在您的代码中)CloseDispose方法。

顺便提一下,请注意,COUNT(*)在MySQL中返回BIGINT,此类型在.NET端与Int64映射。作为Steve mentioned,您可以解析此值而不是像<; p>一样

int UsuarioExiste = int.Parse(sqlCommand.ExecuteScalar());

或者您可以将UsuarioExiste定义为long,这似乎更符合(?)我认为。

long UsuarioExiste = (long)sqlCommand.ExecuteScalar();