首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

阅读器关闭时尝试调用 Read 无效。关于考勤的,代码贴出来给大侠们看,小弟新手。该怎么处理

2012-04-19 
阅读器关闭时尝试调用 Read 无效。关于考勤的,代码贴出来给大侠们看,小弟新手。public override void Fillin

阅读器关闭时尝试调用 Read 无效。关于考勤的,代码贴出来给大侠们看,小弟新手。
public override void FillingRecord()
  {
  int pid = 0;
  OutgoingWebResponseContext outgoingResponse = WebOperationContext.Current.OutgoingResponse;
  outgoingResponse.Headers.Add("Cache-Control", "no-cache");
  outgoingResponse.Headers.Add("Pragma", "no-cache");
  IList<AttendanceMember> list = new List<AttendanceMember>();
  DateTime now = DateTime.Now;

  int checkStatus = 0;
  using (SqlDatabase db = new SqlDatabase())
  {
  //获取考勤参考时间
  db.Parameters.Clear();
  db.CommandText = "SELECT * FROM [dk_Attendance_Members]";
  using (DataReaderWrapper dr = db.ExecuteReader())
  {
  while (dr.Read())
  {
  AttendanceMember msg = new AttendanceMember();
  msg.AttendanceID = dr.GetInt32("AttendanceID");
  msg.MemberID = dr.GetInt32("MemberID");
  msg.CheckInTime = dr.GetDateTime("CheckInTime");
  msg.CheckOutTime = dr.GetDateTime("CheckOutTime");
  msg.Status = (AttendanceStatus)dr.GetInt32("Status");

  list.Add(msg);
   

  if (dr.Read())
  {
  DateTime checkInTimeStr = dr.GetDateTime("CheckInTime");
  DateTime checkOutTimeStr = dr.GetDateTime("CheckOutTime");
  pid = dr.GetInt32("MemberID");
  checkStatus = dr.GetInt32("Status");
  dr.Close();

  string today = now.ToString("yyyy-MM-dd");

  //确定今天是否已有的考勤记录
  db.Parameters.Clear();
  db.CommandText = "SELECT MemberID,CheckInTime, CheckOutTime FROM [dk_Attendance_Records] WHERE [MemberID] = @PID AND [AttendanceDate] = @Today";
  db.CreateParameter<int>("@PID", pid, System.Data.SqlDbType.Int);
  db.CreateParameter<string>("@Today", today, System.Data.SqlDbType.VarChar, 10);

  bool hasRecord = false;
  DateTime amTime = new DateTime();
  DateTime pmTime = new DateTime();
  using (DataReaderWrapper drw = db.ExecuteReader())
  {
  if (drw.Read())
  {
  //已有考勤记录,读取上下班的时间记录。
  hasRecord = true;
  amTime = drw.GetDateTime("CheckInTime");
  pmTime = drw.GetDateTime("CheckOutTime");
  }
   
  drw.Close();
  }
  bool isAM = now.Hour <= 12;//是否上午



  //if (isAM && amTime != DateTime.MinValue)
  //{
  // throw new ArgumentException( "您已经进行上班考勤了!");
  //}
  //else if (!string.IsNullOrEmpty(pmTime))
  //{
  // return "您已经进行下班考勤了!";
  //}


  DateTime checkTime = now.AddMinutes(-3);//TODO:正常应该就是当前时间,但是为了与公司的终端机兼容,于是减去3分钟。(如果终端机的程序修复了需要修改此处) //now;
  string checkFiled;
  string checkStatusField;

  //0-未考勤
  //1-正常
  //2-临界
  //3-迟到
  //4-早退

  if (isAM)
  {
  checkFiled = "CheckInTime";
  checkStatusField = "CheckInStatus";

  DateTime checkInDateTime = DateTime.Parse(checkInTimeStr.ToString("HH:mm:ss"));
  if (checkTime == DateTime.MinValue)
  {
  //在不规定时间内上班
  checkStatus = 0;
  checkTime = DateTime.Parse(checkTime.ToString("yyyy-MM-dd 00:00:00"));
  }
  else
  {
  checkTime = DateTime.Parse(amTime.ToString("yyyy-MM-dd HH:mm:ss"));
  }
  }
  else
  {
  checkFiled = "CheckOutTime";
  checkStatusField = "CheckOutStatus";

  DateTime checkOutDateTime = DateTime.Parse(checkOutTimeStr.ToString("HH:mm:ss"));
  if (checkTime == DateTime.MinValue)
  {
  //在不规定时间后下班
  checkStatus = 0;
  checkTime = DateTime.Parse(checkTime.ToString("yyyy-MM-dd 00:00:00"));
  }
  else
  {
  checkTime = DateTime.Parse(pmTime.ToString("yyyy-MM-dd HH:mm:ss"));
  }
  }
  //foreach (var item in list)
  //{
  db.Parameters.Clear();
  db.CreateParameter<int>("@PID", pid, System.Data.SqlDbType.Int);
  db.CreateParameter<string>("@Today", today, System.Data.SqlDbType.VarChar, 10);
  db.CreateParameter<DateTime>("@CheckTime", checkTime, System.Data.SqlDbType.DateTime);
  db.CreateParameter<int>("@CheckStatus", checkStatus, System.Data.SqlDbType.Int);


  if (hasRecord)//已有记录
  {
  db.CommandText = string.Format("UPDATE [dk_Attendance_Records] SET [{0}] = @CheckTime, [{1}] = @CheckStatus WHERE [MemberID] = @PID AND [AttendanceDate] = @Today", checkFiled, checkStatusField);
  }
  else
  {
  db.CommandText = string.Format("INSERT INTO [dk_Attendance_Records] (AttendanceDate, MemberID, {0}, {1}) VALUES (@Today ,@PID, @CheckTime, @CheckStatus)", checkFiled, checkStatusField);
  }

  db.ExecuteNonQuery();
  //}
  }
  else
  {
  //return "您不能通过网络方式进行考勤!";
  }
  //dr.Close();
  }
  }

  }

  throw new ArgumentException( "ok");
  }

[解决办法]
//drw.Close();
读完成了才关闭

热点排行