Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “如何修复”;指定的强制转换无效";从表中检索数据以确认记录是否存在时出错?_C#_Mysql_Sql_Visual Studio_Winforms - Fatal编程技术网

C# “如何修复”;指定的强制转换无效";从表中检索数据以确认记录是否存在时出错?

C# “如何修复”;指定的强制转换无效";从表中检索数据以确认记录是否存在时出错?,c#,mysql,sql,visual-studio,winforms,C#,Mysql,Sql,Visual Studio,Winforms,我正在使用我的程序向数据库添加帐户。我将生成一个随机帐号,检查数据库中是否存在该帐号,如果不存在,则使用它创建一个新帐号。但是,我在Int32行上遇到错误“指定的强制转换无效”?RecordExist=(Int32?)检查_Records.ExecuteScalar() 我试过.Convert.ToInt32,只试过int,double,我试过在施放之前将其作为一个对象进行检查,但我不知道问题出在哪里 string AccountNumber; bool accountExi

我正在使用我的程序向数据库添加帐户。我将生成一个随机帐号,检查数据库中是否存在该帐号,如果不存在,则使用它创建一个新帐号。但是,我在
Int32行上遇到错误“指定的强制转换无效”?RecordExist=(Int32?)检查_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();
提前谢谢你的帮助,如果我犯了任何错误,我向你道歉


编辑:我要转换的类型不正确,使用即时窗口我可以看到它需要是
Int64
。它现在起作用了!谢谢

您应该尝试将
ExecuteScalar
值保存到
对象
类型变量,然后在调试中找出其类型,然后应用强制转换。正如@Alex K在评论部分提到的那样。
希望它能起作用。

如果将
ExecuteScalar
值保存到对象变量(没有任何强制转换),会得到什么结果?@AmitKumar它返回
0
!如果您将该对象强制转换为
int
?它能工作吗?如果你在调试器中为一个对象指定了它的类型(或者查看RecordExist.GetType().Name)嗨@AlexK和@AmitKumar,我已经按照你的建议做了,类型是
Int64
,所以我相应地调整了我的代码,现在它能工作了!谢谢你的帮助!我已经按照你的建议做了,类型是Int64,所以我相应地调整了我的代码,现在它可以工作了!谢谢你的帮助!