Как исправить ошибку «Указанное приведение неверно» при извлечении данных из таблицы, чтобы подтвердить, существует ли запись? - PullRequest
0 голосов
/ 29 марта 2019

Я использую свою программу для добавления учетных записей в базу данных.Я генерирую случайный номер счета, проверяю, существует ли этот номер счета в базе данных, и использую его для создания новой учетной записи, если его нет.Тем не менее я получаю сообщение об ошибке «Указанное преобразование не является допустимым» в строке Int32? RecordExist = (Int32?)check_Records.ExecuteScalar();.

Я пробовал .Convert.ToInt32, просто int, double, и я пытался осмотреть его как объект до приведения, но я не могу понять, в чем проблема.

 string AccountNumber;
         bool accountExists = true;

        while (accountExists)
        {
            //GENERATE A RANDOM ACCOUNT NUMBER
            Random rnd = new Random();
            int acc1 = rnd.Next(0000, 9999);
            int acc2 = rnd.Next(0000, 9999);

            AccountNumber = "2000-" + acc1 + "-" + acc2 + ";";

            using (MySqlConnection conn = new MySqlConnection(Properties.Settings.Default.ConnectionString))
            {
                conn.Open();

                //CHECK WHETHER ACCOUNT NUMBER EXISTS. 
                string Query = @"SELECT COUNT(*) FROM accounts WHERE Account_Number = '" + AccountNumber + "'";

                using (MySqlCommand check_Records = new MySqlCommand(Query, conn))
                {
                       Int32? RecordExist = (Int32?)check_Records.ExecuteScalar();

                        if (RecordExist.HasValue && RecordExist.Value > 0)
                        {
                            //ACCOUNT EXISTS, GENERATE ANOTHER ACCOUNT NUMBER 
                            accountExists = true;
                            break;
                        }
                        else
                        {
                            //ACCOUNT DOES NOT EXIST, USE ACCOUNT NUMBER
                            accountExists = false;
                            lblNewAccountNumber.Text = AccountNumber;
                        }
                    }

                    conn.Close();

Спасибо за вашу помощь заранее, и я прошу прощения, если я допустил какие-либо ошибки!

РЕДАКТИРОВАТЬ: тип, который я использовал, был неправильным, и с помощью непосредственного окна Iсмог увидеть, что это должно быть Int64.Теперь это работает!Спасибо!

1 Ответ

1 голос
/ 30 марта 2019

Вы должны попытаться сохранить значение ExecuteScalar в переменной типа object, затем выяснить при отладке, каков ее тип, а затем применить приведение.Как упоминается @Alex K в разделе комментариев.Надеюсь, что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...