获取DataSet ds.Tables [0] .Rows.Count = 0

时间:2013-11-25 13:34:55

标签: c# mysql

您好我正在VS 2010 C#和MySql

中开发一个应用程序

我有一个功能来验证提供的凭据是否存在。代码如下。

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。不知道怎么做。

重新提出您的建议。

2 个答案:

答案 0 :(得分:3)

首先,您打开sql-injection,使用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;
    }
}

答案 1 :(得分:0)

我遇到了同样的问题,更多信息,sql数据库返回0行,但da.Tables(0).Rows.Count = 1。

我的问题是在进行此检查之前,我在另一个SQL查询中使用了数据集。请记住在执行新的SQL查询之前始终重置数据集,否则您将遇到问题。