首页 > 解决方案 > C#:Dbreader 值未在循环中更新

问题描述

我正在阅读 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);
}

标签: c#

解决方案


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

string reSQL = "SELECT schdl, techid, appdatetime, section FROM dbo.name WHERE schdl_refno = @reschdl";
// Do NOT try to re-use the same connection object throughout your app!
using (var conn = new OdbcConnection("connection string here"))
using (var cmd = new OdbcCommand(reSQL, conn))
{
    //Make sure the type and length here match the column. This info isn't in the question, so I had to guess.
    var p = cmd.Parameters.Add("@reschdl", OdbcType.VarChar, 80);
    conn.Open()

    foreach(var reschdl in schdlrefno)
    {
        p.Value = reschdl;
        var reader = cmd.ExecuteReader();
        if (reader.Read())
        {
            //We're still overwriting these on each iteration!
            APPDT = "";
            SCHEDULEREFNO = reader.GetString(reader.GetOrdinal("schdl"));
            TECHID = reader.GetString(reader.GetOrdinal("techid"));
            APPDT = reader.GetString(reader.GetOrdinal("appdatetime"));
            SECTIONNAME = reader.GetString(reader.GetOrdinal("section"));
        }
        Console.Writeline(APPDT);
    }
}

推荐阅读