当我运行程序时,我收到此错误:
无效的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);
}
答案 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 + "%");
请尽可能多地使用AddWithValue
。 It may generate unexpected and surprising results sometimes。使用Add
方法重载来指定参数类型及其大小。
还可以使用using
statement自动处理您的连接和命令,而不是手动调用(在某些地方可能在您的代码中)Close
或Dispose
方法。
顺便提一下,请注意,COUNT(*)
在MySQL中返回BIGINT
,此类型在.NET端与Int64
映射。作为Steve mentioned,您可以解析此值而不是像<; p>一样
int UsuarioExiste = int.Parse(sqlCommand.ExecuteScalar());
或者您可以将UsuarioExiste
定义为long
,这似乎更符合(?)我认为。
long UsuarioExiste = (long)sqlCommand.ExecuteScalar();