簡體   English   中英

C#使用MYSQL ExecuteScalar()類型錯誤

[英]C# using MYSQL ExecuteScalar() type error

我正在使用Xamarin中的MySQL庫連接到我的數據庫。 我正在調用ExecuteScalar()命令來檢查我的數據庫中是否存在用戶。

我將ExecuteScalar()的返回轉換為Int32並存儲在名為userCount的Int32變量中,但當我嘗試調用(int32)checkUser.ExecuteScalar();時,Visual Studio拋出(int32)checkUser.ExecuteScalar(); cast is not valid錯誤(int32)checkUser.ExecuteScalar();

這就是它在文檔中的建議,所以我很困惑。 這是我的代碼:

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
}

您鏈接到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);
        }

你可能正在嘗試將nullint32

幾周前我遇到了同樣的問題。 問題是ExecuteScalar()返回長對象 ,它不能簡單地轉換為int。 但它可以轉換為long 然后轉換為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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM