C#使用MYSQL ExecuteScalar()类型错误

时间:2017-05-05 00:11:13

标签: c# mysql xamarin

我正在使用Xamarin中的MySQL库连接到我的数据库。我正在调用ExecuteScalar()命令来检查我的数据库中是否存在用户。

我将ExecuteScalar()的返回值转换为Int32并存储在名为userCount的Int32变量中,但当我尝试调用cast is not valid时,Visual Studio会抛出(int32)checkUser.ExecuteScalar();错误}

这是建议在documentation中完成的方式,所以我很困惑。这是我的代码:

using MySql.Data.MySqlClient;
using System.Data;

MySqlCommand checkUser = new MySqlCommand("SELECT COUNT(*) FROM <MyCoolDatabase> WHERE Userid = '" + username + "'", connection);

Int32 userCount = (Int32)checkUser.ExecuteScalar(); //error is here
if(userCount >0)
{
    //do stuff
}

2 个答案:

答案 0 :(得分:1)

您已关联到System.Data.SqlClient而非MySQL.Data.MySqlClient

https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-sql-command.html

有一个例子 -

object result = cmd.ExecuteScalar();
        if (result != null)
        {
            int r = Convert.ToInt32(result);
            Console.WriteLine("Number of countries in the world database is: " + r);
        }

您可能正在尝试将null投射到int32

答案 1 :(得分:-1)

几周前我遇到了同样的问题。 问题是ExecuteScalar()返回长对象,并且它无法简单地转换为int。但它可以转换为长转换为int

更改您的代码:

Int32 userCount = (Int32)checkUser.ExecuteScalar(); //error is here

要:

int userCount = (int)(long)(checkUser.ExecuteScalar());

这对我没有任何问题。

顺便提一下如何使用参数:

using (MySqlCommand cmd = connection.CreateCommand())
{
    cmd.CommandText = "SELECT COUNT(*) FROM <MyCoolDatabase> WHERE Userid = @user";
    cmd.Parameters.AddWithValue("@user", username);

    int userCount = (int)(long)(checkUser.ExecuteScalar());
    if (userCount > 0)
    {
        //work
    }
}