2013-11-25 45 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; 
    } 
} 
相关问题