1. ホーム
  2. c#

[解決済み] 型 'int?' を 'int' に暗黙のうちに変換できません。

2022-02-07 21:57:06

質問

エラー "型 'int?' を 'int' に暗黙的に変換することはできません。明示的な変換が存在します(キャストが不足していますか)"私のOrdersPerHourの戻り行で。私のC#のスキルはそれほど高くないので、なぜかよくわかりません。どんな助けでも感謝します。

static int OrdersPerHour(string User)
{
    int? OrdersPerHour;
    OleDbConnection conn = new OleDbConnection(strAccessConn);
    DateTime curTime = DateTime.Now;        

    try
    {
        string query = "SELECT COUNT(ControlNumber) FROM Log WHERE DateChanged > #" + curTime.AddHours(-1) + "# AND User = '" + User + "' AND Log.EndStatus in ('Needs Review', 'Check Search', 'Vision Delivery', 'CA Review', '1TSI To Be Delivered');";
        OleDbCommand dbcommand = new OleDbCommand(query, conn);
        dbcommand.Connection.Open();
        dbcommand.CommandType = CommandType.Text;
        OrdersPerHour = (int?)dbcommand.ExecuteScalar();

        Console.WriteLine("Orders per hour for " + User + " is " + OrdersPerHour);            
    }
    catch (OleDbException ex)
    {

    }
    finally
    {
        conn.Close();
    }
    return OrdersPerHour;
}

解決方法は?

さて、あなたはキャスティングをしています。 OrdersPerHourint?

OrdersPerHour = (int?)dbcommand.ExecuteScalar();

しかし、あなたのメソッドのシグネチャは int :

static int OrdersPerHour(string User)

この2つは一致しなければならない。


また、簡単な提案 -> クエリにパラメータを使用する のようなものです。

string query = "SELECT COUNT(ControlNumber) FROM Log WHERE DateChanged > ? AND User = ? AND Log.EndStatus in ('Needs Review', 'Check Search', 'Vision Delivery', 'CA Review', '1TSI To Be Delivered')";
OleDbCommand dbcommand = new OleDbCommand(query, conn);
dbcommand.Parameters.Add(curTime.AddHours(-1));
dbcommand.Parameters.Add(User);