2015-02-01 2 views
1

Как это разрешить?Указанный листинг недействителен в C#

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"); 
} 

InvalidCastException брошен в следующей строке:

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

Возможно, вам стоит указать ошибку, которую вы получаете, и по какой строке. –

+0

Привет, я получаю ошибку в строке «int result = (int) cmd.executescalar(); – Ameena

+0

@Ameena Вы уверены, что результат' ExecuteScalar() 'является целым значением? Что говорит отладчик? – Andy

ответ

1

Попытки отладить такой код:

object Result = cmd.ExecuteScalar(); 

Я думаю, что это будет decimal, но это зависит от того, Поведение MySQL. И в C# вы не можете просто преобразовать double в int, , если он помещен в коробку. Просто получить правильный тип и преобразовать его, и только после этого вы можете преобразовать в int, как это:

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

Кроме того, вы можете получить object через var ключевое слово, и использовать Convert класс:

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

В C# вы можете явно использовать двойную к n целое число. Почему «COUNT» возвращает double? – Frank

+0

@Frank 'decimal' или double генерирует исключение в проверенном контексте, так как значение« double »помещается в квадрат и должно быть преобразовано в его реальный тип раньше. Это дубликат: http://stackoverflow.com/a/14944290/213550 – VMAtm

+0

@Frank Обновлен ответ. – VMAtm

Смежные вопросы