c#
  • mysql
  • datetime
  • 2015-12-25 163 views -1 likes 
    -1

    以下代碼無法正常工作。C# - Mysql DateTime比較

    public int getRecord(int number, DateTime startingDateTime) 
    { 
        int id=-1; 
        string stm = "SELECT * FROM history WHERE number= '" 
         + number + "' AND 'startingDateTime' = '" + startingDateTime+ "'"; 
        try 
        { 
         con.Open(); 
         cmd = new MySqlCommand(stm, con); 
        } 
        catch (Exception e) 
        { 
         ErrorMessage = e.Message; 
         con.Close(); 
         return 0; 
        } 
        try 
        { 
         rdr = cmd.ExecuteReader(); 
         while (rdr.Read()) 
         { 
          id = rdr.GetInt32(0); 
         } 
        } 
        catch (Exception e) 
        { 
         ErrorMessage = e.Message; 
         con.Close(); 
         return 0; 
        } 
        con.Close(); 
        return 1; 
    } 
    

    語法沒有問題,至少它沒有警告我。但是,錯誤的是:

    無效嘗試讀取調用之前訪問一個字段()

    我想比較兩個日期時間變量。邏輯對我來說看起來很好。如果有人知道這個訣竅,我正在等待它。

    +0

    爲什麼你將你的數字和日期時間值存儲爲一個字符?爲什麼你的列名稱'startingDateTime'有單引號呢? –

    +0

    Soner,hacıbenbayağıyeniyim bu mysql de。 internettengördüğümkadarıylayapıyorumtırnakniyekullanılırfilanhiçbilmiyorum yani。 bu konudadaaraştırdımama benzerbişeyerastgelmedim。 –

    +0

    確保rdr不爲空。你可能沒有得到任何匹配。 DateTime可能包含不匹配的秒和毫秒。使用DateTime的'Date'將截斷到午夜的一天,或者在一天之間使用之間的某個日期範圍內匹配,如午夜到午夜。 – jdweng

    回答

    3

    沒有意義存儲您的數字和日期時間值。 You have a bad habit to kick。將您的列更改爲整數類型和日期時間類型。並且沒有必要在列名中使用單引號。只要刪除它們。

    還使用using語句來自動處理您的連接,命令和閱讀器,而不是手動調用Close方法。

    using(var con = new MySqlConnection(conString)) 
    using(var stm = con.CreateCommand()) 
    { 
        stm.CommandText = "SELECT * FROM history WHERE number = @number AND startingDateTime = @start"; 
        stm.Parameters.AddWithValue("@number", number); 
        stm.Parameters.AddWithValue("@start", startingDateTime); 
    
        using(var rdr = cmd.ExecuteReader()) 
        { 
         id = rdr.GetInt32(0); 
        } 
    } 
    
    +0

    雖然我同意你(當然)與所有的建議給我有點困惑。收盤後的閱讀在哪裏? – Steve

    +0

    它不會進入第一個捕捉部分,因此連接始終打開。我認爲這個問題無關緊要。但必須有。我很確定 –

    +0

    例如,如果我刪除'日期'部分只是留下'數字',代碼工作得很好。 –

    相關問題