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;
}
访问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
吗?如果是的话,这可能会帮助你缩小搜索范围。