阅读器关闭时尝试调用 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");
}