0

我有一个用于验证的 cicle,但由于某种原因它没有通过 cicle

看看评论,while cicle 似乎什么也没做

如果有任何方法可以检索一个结果,请告诉我该怎么做

这是我的代码,任何帮助将不胜感激

private bool validar_ultimo_movimiento(Int64 cedula)
    {
        bool validar = false;


        DateTime tipo = Convert.ToDateTime("00:00:00");
        SqlConnection Wdcon_usuario = new SqlConnection(WDcon);
        SqlCommand usuario = new SqlCommand();
        SqlDataReader usuarioDR = null;

        //Instancio la conexion SQL
        usuario.Connection = Wdcon_usuario;

        //Registro el Query SQL
        usuario.CommandText = "SELECT TOP 1 * FROM movimiento_docente WHERE (ID = @cedula) ORDER BY id_movimiento DESC";
        usuario.Parameters.AddWithValue("@cedula", cedula);

        //Abro la conexion
        Wdcon_usuario.Open();

        //Ejecuto la consulta
        usuarioDR = usuario.ExecuteReader();

        //Empiezo el ciclo
        while (usuarioDR.Read())
        {
            MessageBox.Show("Paso por aca 2"); // <- It does not execute
            if (usuarioDR["fechahora"].ToString() != "")
            {
                MessageBox.Show("Paso por aca 3");
                tipo = (DateTime)usuarioDR["fechahora"];
                MessageBox.Show(tipo.ToString());
            }
            else
            {
                validar = true;
                MessageBox.Show("Paso por aca 1");
            }
        }

        //Cierro la conexion
        Wdcon_usuario.Close();
        //Termino la sentencia SQL

        DateTime valoringresado = Convert.ToDateTime(dtHoraManual.Value);
        MessageBox.Show("Valor Ingresado = " + valoringresado.ToString() + " Valor BD = " + tipo.ToString());
        if (valoringresado > tipo)
        {
            validar = true;
        }
        else
        {
            validar = false;
        }
        return validar;
    }
4

1 回答 1

1

您访问 SQLDataReader 对象的代码看起来是正确的。

如果我理解正确,则此while循环未运行:

   //Empiezo el ciclo
    while (usuarioDR.Read())
    {
        MessageBox.Show("Paso por aca 2"); // <- It does not execute
        if (usuarioDR["fechahora"].ToString() != "")
        {
            MessageBox.Show("Paso por aca 3");
            tipo = (DateTime)usuarioDR["fechahora"];
            MessageBox.Show(tipo.ToString());
        }
        else
        {
            validar = true;
            MessageBox.Show("Paso por aca 1");
        }
    }

如果这个循环没有运行,那是因为usuarioDR.Read()函数返回的值是false. 这里有一些事情可以尝试找出问题所在:

开始调试您的代码 - 一个好的第一步是在您的函数中放置一个断点while (usuarioDR.Read())并查看该对象中包含哪些信息。对象usuarioDR中有什么东西吗?usuarioDR如果没有,这意味着usarioDR当你调用时没有任何东西被推入ExecuteReader()

尝试从另一端解决这个问题 - 在 Server Management Studio 中写出您的"SELECT TOP 1 * FROM movimiento_docente WHERE (ID = @cedula) ORDER BY id_movimiento DESC"查询,并为@cedula. 它会产生您期望的结果吗?如果是这样,那么这意味着您的问题在于您的代码以及它如何访问数据库。

最后,我认为这将归结为标准的调试过程:设置断点,单步执行代码,并检查对象中的数据,看看它是否符合您的期望。

One place to start looking might be at your usarioDR object. You start by initializing it as null; is it still null after you run the line usuarioDR = usuario.ExecuteReader();? If it is, that might help you narrow your search.

于 2012-04-05T19:05:41.603 回答