[英]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);
}
你可能正在嘗試將null
為int32
幾周前我遇到了同樣的問題。 問題是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.