cicle的问题,一个结果,但它并没有解决它

本文关键字:结果 解决 一个 并没有 问题 cicle | 更新日期: 2023-09-27 18:30:13

我有一个cicle用于验证,但由于某些原因,它不会破坏cicle

看看评论,虽然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;
    }

cicle的问题,一个结果,但它并没有解决它

访问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对象中有什么内容吗?如果没有,则表示在调用ExecuteReader()时,没有任何内容被推入usarioDR

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

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

一个开始寻找的地方可能是您的usarioDR对象。首先将其初始化为null;运行线路usuarioDR = usuario.ExecuteReader();后,它仍然是null吗?如果是的话,这可能会帮助你缩小搜索范围。