C# C:Dbreader值未在循环中更新

C# C:Dbreader值未在循环中更新,c#,C#,我正在读取sql数据库,但我的dbreader值没有更新。有没有什么方法可以在循环时清除这些值并获取新值 for (int i = 0; i < schdlrefno.Count; i++) { reschdl = schdlrefno[i]; reSQL = " SELECT schdl, techid, appdatetime, section FROM dbo.name WHERE schdl_refno ='"

我正在读取sql数据库,但我的dbreader值没有更新。有没有什么方法可以在循环时清除这些值并获取新值

for (int i = 0; i < schdlrefno.Count; i++)
{
  reschdl = schdlrefno[i];                    
  reSQL = " SELECT schdl, techid, appdatetime, section  FROM dbo.name WHERE schdl_refno ='" + reschdl + "' ";

  OdbcCommand DbCommand = conn.CreateCommand();
  DbCommand.CommandText = reSQL;
  DbCommand.CommandTimeout = 180;

  OdbcDataReader DbReader = DbCommand.ExecuteReader();

  if (DbReader.Read())
  {
    APPDT = "";
    SCHEDULEREFNO = DbReader.GetString(DbReader.GetOrdinal("schdl"));
    TECHID = DbReader.GetString(DbReader.GetOrdinal("techid"));
    APPDT = DbReader.GetString(DbReader.GetOrdinal("appdatetime"));
    SECTIONNAME = DbReader.GetString(DbReader.GetOrdinal("section"));
   }
   OdbcConnection reconn;
                                   
   console.Writeline(APPDT);
}

这里仍然存在问题,但它修复了我上面两条评论中的五个问题中的四个,并展示了一种更好的代码结构方式:

string reSQL=从dbo.name中选择schdl、techid、appdatetime和section,其中schdl_refno=@reschdl; //不要尝试在整个应用程序中重复使用相同的连接对象! 在此处使用var conn=新的OdbcConnectionconnection字符串 使用var cmd=new OdbcCommandreSQL,conn { //确保此处的类型和长度与列匹配。此信息不在问题中,因此我不得不猜测。 var p=cmd.Parameters。Add@reschdl,OdbcType.VarChar,80; 康涅狄格州公开赛 schdlrefno中的foreachvar reschdl { p、 值=reschdl; var reader=cmd.ExecuteReader; 如果是读卡器,请阅读 { //我们仍然会在每次迭代中覆盖这些内容! APPDT=; SCHEDULEREFNO=reader.GetStringreader.GetOrdinalschdl; TECHID=reader.GetStringreader.GetOrdinaltechid; APPDT=reader.GetStringreader.getOrdinalUpdateTime; SECTIONNAME=reader.GetStringreader.GetOrdinalsection; } Console.WritelineAPPDT; } }
哎呀。这看起来很容易受到sql注入问题的影响。为什么需要在这里循环?FROM和WHERE关键字现在是可选的吗?另外,还有四个大问题。首先,SQL是无效的。没有FROM或WHERE,这是合法的,但是您需要为=比较和列名提供一些上下文。其次,这会在每次迭代时附加到reSQL,因此在循环结束时,您将使用一个命令运行许多语句。第三,DbCommand与可能在此处作用域中的类型名称冲突。大多数人只使用command或cmd。最后,循环在每次迭代中分配给相同的变量,这意味着它们将被最后一条语句覆盖。即使循环有效,您的变量也只保留最后一条记录。谢谢Joel,我很感激。特别是为了使用正确的代码。我可以试一试吗