2013-11-25 76 views
0

您好我開發於2010年VS C#和MySQL獲取數據集ds.Tables [0] .Rows.Count = 0

應用我有一個函數來驗證被提供憑證存在與否。代碼如下。

private bool Validate(string studentId, string time) 
    { 
     var msCon = _dal.OpenMySQLConnection(); 
     var da = new MySqlDataAdapter("SELECT * FROM tblStudent where Registeration_Date='" + time.Trim() + "' and studentId='" + studentId.Trim() + "' order by date_time desc limit 1", msCon); 
     var ds = new DataSet(); 
     da.Fill(ds); 
     var count = ds.Tables[0].Rows.Count; 
     if (count == 0) 
     { 
      updateOrExist.Text = @"E"; 
      updationTime.Text = @"Current Checked Time: " + DateTime.Now.ToShortTimeString(); 
      return true; 
     } 
     updationTime.Text = @"Current updated Time: " + DateTime.Now.ToShortTimeString(); 
     return false; 
    } 

在這裏已經有註冊的學生匹配的結果,但我仍然count = 0。不知道如何。

請求您的建議。

回答

3

首先,您打開了sql注入,使用sql-parameters而不是字符串連接。

根據你的實際問題,我必須承認,我不知道是什麼原因造成的問題。但使用正確類型的參數通常可以解決這些問題:

private bool Validate(string studentId, string time) 
{ 
    DateTime registrationDate; 
    if (!DateTime.TryParse(time.Trim(), out registrationDate)) 
     throw new ArgumentException("Time must be convertible to datetime", "time"); 
    int id; 
    if (!int.TryParse(studentId.Trim(), out id)) 
     throw new ArgumentException("StudentId must be convertible to Integer", "studentId"); 
    string sql = @" 
     SELECT * FROM tblStudent 
     WHERE Registeration_Date=?Registeration_Date 
     AND  StudentID=?StudentID 
     ORDER BY date_time desc 
     limit 1"; 
    using (var msCon = new MySqlConnection("connection-string")) 
    using (var da = new MySqlDataAdapter(sql, msCon)) 
    { 
     da.SelectCommand.Parameters.AddWithValue("?Registeration_Date", registrationDate); 
     da.SelectCommand.Parameters.AddWithValue("?StudentID", id); 

     var table = new DataTable(); 
     da.Fill(table); 
     return table.Rows.Count = 1; 
    } 
} 
相關問題