private void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { this.errorMessage = ""; this.dtErrorTable.Rows.Clear(); _backgroundWorker.ReportProgress(10); //清空上次資料 scaDuplicateList.Clear(); List <string> sidList = new List <string>(); // 學生班級基本資料(學生狀態為一般) QueryHelper qh1 = new QueryHelper(); string query1 = "select student.id,class.grade_year,student_number,class.class_name,seat_no,student.name from student inner join class on student.ref_class_id=class.id where student.status=1 and class.grade_year ='" + targetGradeYear + "' order by class.grade_year,student_number;"; DataTable dt1 = qh1.Select(query1); foreach (DataRow dr in dt1.Rows) { sidList.Add("" + dr["id"]); } _backgroundWorker.ReportProgress(20); #region 的抓取成績方式 (有問題!) // 2018/7/4 穎驊協助 嘉詮處理客服 https://ischool.zendesk.com/agent/tickets/6133 ,發現 ischool API SHSemesterScore.SelectByStudentID // 預設會將 學期歷程重覆的 重讀學期資料濾掉, 需要設定為 false,才會有。 //List<SHSchool.Data.SHSemesterScoreRecord> ssList = SHSchool.Data.SHSemesterScore.SelectByStudentIDs(sidList, false); //foreach (SHSemesterScoreRecord data in ssList) //{ // // 2018/6/12 穎驊筆記,佳樺測出 會抓到同學期的成績比對,在此濾掉, 同學期的重覆不算,因為學校可能會先算過本學期的 成績, 那本學期成績 與本學期修課重覆 是很正常的事 // if ("" + data.SchoolYear == schoolYear && "" + data.Semester == semester) // { // continue; // } // // 以前學期,學期科目成績紀錄(題外話 如果未來覺得 scaList 使用ischool API的抓法太沒效率,可以考慮直接寫一串SQL) // if (!dataCompareDict.ContainsKey(data.RefStudentID)) // { // dataCompareDict.Add(data.RefStudentID, new List<string>()); // foreach (var subjectData in data.Subjects.Values) // { // if (!dataCompareDict[data.RefStudentID].Contains(subjectData.Subject + "_" + subjectData.Level)) // { // dataCompareDict[data.RefStudentID].Add(subjectData.Subject + "_" + subjectData.Level); // } // } // } // else // { // foreach (var subjectData in data.Subjects.Values) // { // if (!dataCompareDict[data.RefStudentID].Contains(subjectData.Subject + "_" + subjectData.Level)) // { // dataCompareDict[data.RefStudentID].Add(subjectData.Subject + "_" + subjectData.Level); // } // } // } //} #endregion // 2018/9/12 穎驊註解, 因應康橋結業計算詢問的問題:"有學生有重覆科目級別,卻在本功能無法列出", // 檢查後發現 使用 ischool API List<SHSchool.Data.SHSemesterScoreRecord> ssList = SHSchool.Data.SHSemesterScore.SelectByStudentIDs(sidList, false); // 抓取的學期科目成績, 若同一學期 有重覆的兩個科目, 此API 回傳的只會有第一筆,因此會造成部分學生的重覆修課檢查無法在本功能被列出 // 跟恩正討論後,建議與成績計算邏輯 WearyDogComputer 抓取學生學期科目成績使用方法一致,因此做了下列改寫 #region 新寫法 AccessHelper accesshelper = new AccessHelper(); List <SmartSchool.Customization.Data.StudentRecord> students = new List <SmartSchool.Customization.Data.StudentRecord>(); students = new List <SmartSchool.Customization.Data.StudentRecord>(); foreach (SmartSchool.Customization.Data.ClassRecord classrecord in accesshelper.ClassHelper.GetAllClass()) { int tryParseGradeYear; if (int.TryParse(classrecord.GradeYear, out tryParseGradeYear) && tryParseGradeYear == (int)numericUpDown1.Value) { students.AddRange(classrecord.Students); } } // 預設會將 學期歷程重覆的 重讀學期資料濾掉, 需要設定為 false,才會有。 accesshelper.StudentHelper.FillSemesterSubjectScore(false, students); _backgroundWorker.ReportProgress(30); _backgroundWorker.ReportProgress(40); Dictionary <string, decimal> passingStandardDict = new Dictionary <string, decimal>(); Dictionary <string, decimal> makeupStandardDict = new Dictionary <string, decimal>(); Dictionary <string, string> remarkDict = new Dictionary <string, string>(); Dictionary <string, string> studentGraduationPlanDict = new Dictionary <string, string>(); dtErrorTable.Columns.Clear(); dtErrorTable.Columns.Add("student_number"); dtErrorTable.Columns.Add("class_name"); dtErrorTable.Columns.Add("seat_no"); dtErrorTable.Columns.Add("student_name"); dtErrorTable.Columns.Add("student_id"); List <string> studentIDList = new List <string>(); bool chkCalcHasError = false; foreach (SmartSchool.Customization.Data.StudentRecord student in students) { studentIDList.Add(student.StudentID); XmlElement scoreCalcRule = SmartSchool.Evaluation.ScoreCalcRule.ScoreCalcRule.Instance.GetStudentScoreCalcRuleInfo(student.StudentID) == null ? null : SmartSchool.Evaluation.ScoreCalcRule.ScoreCalcRule.Instance.GetStudentScoreCalcRuleInfo(student.StudentID).ScoreCalcRuleElement; if (scoreCalcRule == null) { chkCalcHasError = true; // 沒有設定成績計算規則 if (!remarkDict.ContainsKey(student.StudentID)) { remarkDict.Add(student.StudentID, "沒有設定成績計算規則"); } DataRow dr = this.dtErrorTable.NewRow(); dr["student_number"] = student.StudentNumber; dr["class_name"] = student.RefClass.ClassName; dr["seat_no"] = student.SeatNo; dr["student_name"] = student.StudentName; dr["student_id"] = student.StudentID; this.dtErrorTable.Rows.Add(dr); } else { DSXmlHelper helper = new DSXmlHelper(scoreCalcRule); decimal passingStandard = -1; decimal makeupStandard = -1; foreach (XmlElement element in helper.GetElements("及格標準/學生類別")) { string cat = element.GetAttribute("類別"); bool useful = false; //掃描學生的類別作比對 foreach (CategoryInfo catinfo in student.StudentCategorys) { if (catinfo.Name == cat || catinfo.FullName == cat) { useful = true; } } if (useful) { if (!remarkDict.ContainsKey(student.StudentID)) { remarkDict.Add(student.StudentID, "" + cat); } else { remarkDict[student.StudentID] += "," + cat; } } //學生是指定的類別或類別為"預設" if (cat == "預設" || useful) { switch (targetGradeYear) { case "1": decimal.TryParse(element.GetAttribute("一年級及格標準"), out passingStandard); decimal.TryParse(element.GetAttribute("一年級補考標準"), out makeupStandard); break; case "2": decimal.TryParse(element.GetAttribute("二年級及格標準"), out passingStandard); decimal.TryParse(element.GetAttribute("二年級補考標準"), out makeupStandard); break; case "3": decimal.TryParse(element.GetAttribute("三年級及格標準"), out passingStandard); decimal.TryParse(element.GetAttribute("三年級補考標準"), out makeupStandard); break; case "4": decimal.TryParse(element.GetAttribute("四年級及格標準"), out passingStandard); decimal.TryParse(element.GetAttribute("四年級補考標準"), out makeupStandard); break; default: break; } if (passingStandardDict.ContainsKey(student.StudentID)) { if (passingStandardDict[student.StudentID] > passingStandard) { passingStandardDict[student.StudentID] = passingStandard; } } else { passingStandardDict.Add(student.StudentID, passingStandard); } if (makeupStandardDict.ContainsKey(student.StudentID)) { if (makeupStandardDict[student.StudentID] > makeupStandard) { makeupStandardDict[student.StudentID] = makeupStandard; } } else { makeupStandardDict.Add(student.StudentID, makeupStandard); } } } } foreach (SmartSchool.Customization.Data.StudentExtension.SemesterSubjectScoreInfo subjectScore in student.SemesterSubjectScoreList) { // 2018/6/12 穎驊筆記,佳樺測出 會抓到同學期的成績比對,在此濾掉, 同學期的重覆不算,因為學校可能會先算過本學期的 成績, 那本學期成績 與本學期修課重覆 是很正常的事 if ("" + subjectScore.SchoolYear == schoolYear && "" + subjectScore.Semester == semester) { continue; } // 以前學期,學期科目成績紀錄(題外話 如果未來覺得 scaList 使用ischool API的抓法太沒效率,可以考慮直接寫一串SQL) if (!dataCompareDict.ContainsKey(student.StudentID)) { dataCompareDict.Add(student.StudentID, new List <string>()); if (!dataCompareDict[student.StudentID].Contains(subjectScore.Subject + "_" + subjectScore.Level)) { dataCompareDict[student.StudentID].Add(subjectScore.Subject + "_" + subjectScore.Level); } } else { if (!dataCompareDict[student.StudentID].Contains(subjectScore.Subject + "_" + subjectScore.Level)) { dataCompareDict[student.StudentID].Add(subjectScore.Subject + "_" + subjectScore.Level); } } } } #endregion if (chkCalcHasError) { e.Cancel = true; errorMessage = "沒有設定成績計算規則學生名單:"; return; } // 取得學生當學期修課 QueryHelper qhScAttend = new QueryHelper(); string qryScAttend = "SELECT " + "sc_attend.id AS sc_attend_id" + ",course.id AS course_id" + ",course.school_year AS school_year" + ",course.semester AS semester" + ",course.course_name AS course_name" + ",student.id AS student_id" + ",student.name AS student_name" + ",student.student_number AS student_number" + ",sc_attend.passing_standard" + ",sc_attend.makeup_standard" + ",sc_attend.remark" + ",sc_attend.subject_code" + " FROM " + "course INNER JOIN sc_attend" + " ON course.id = sc_attend.ref_course_id INNER JOIN" + " student ON sc_attend.ref_student_id = student.id " + " WHERE student.id IN(" + string.Join(",", studentIDList.ToArray()) + ") AND course.school_year = " + schoolYear + " AND course.semester = " + semester + "; "; DataTable dtScAttend = qh1.Select(qryScAttend); List <DataRow> updateScoreList = new List <DataRow>(); hasScoreList.Clear(); hasSubjectCodeList.Clear(); // 比對填入 data table foreach (DataRow dr in dtScAttend.Rows) { string sid = dr["student_id"].ToString(); bool hasScore = false; // 已有及格標準或補考標準不寫入 // 及格標準 if (dr["passing_standard"] != null) { if (dr["passing_standard"].ToString() != "") { hasScore = true; } } // 補考標準 if (dr["makeup_standard"] != null) { if (dr["makeup_standard"].ToString() != "") { hasScore = true; } } // 是否有課程代碼 bool hasSubjectCode = false; if (dr["subject_code"] != null) { if (dr["subject_code"].ToString() != "") { hasSubjectCode = true; } } if (hasSubjectCode) { hasSubjectCodeList.Add(dr); } if (hasScore) { hasScoreList.Add(dr); } else { // 及格標準 if (passingStandardDict.ContainsKey(sid)) { dr["passing_standard"] = passingStandardDict[sid]; } // 補考標準 if (makeupStandardDict.ContainsKey(sid)) { dr["makeup_standard"] = makeupStandardDict[sid]; } // 備註 if (remarkDict.ContainsKey(sid)) { dr["remark"] = "學生身分:" + remarkDict[sid]; } updateScoreList.Add(dr); } } MyUserState mus = new MyUserState(); mus.Name = "及格補考標準"; mus.Value = "50"; _backgroundWorker.ReportProgress(50, mus); // _backgroundWorker.ReportProgress(50); // 更新修課紀錄 List <string> sbUpdateScAttend = new List <string>(); // 只更新沒有及格補考標準 foreach (DataRow dr in updateScoreList) { string passing_standard = "null"; string makeup_standard = "null"; string rem = ""; if (dr["passing_standard"] != null) { passing_standard = dr["passing_standard"].ToString(); } if (dr["makeup_standard"] != null) { makeup_standard = dr["makeup_standard"].ToString(); } if (dr["remark"] != null) { rem = dr["remark"].ToString(); } string sc_id = dr["sc_attend_id"].ToString(); string updateStr = "" + "UPDATE sc_attend " + " SET passing_standard=" + passing_standard + ",makeup_standard =" + makeup_standard + ",remark='" + rem + "'" + " WHERE id=" + sc_id + ";"; sbUpdateScAttend.Add(updateStr); } // 更新修課 UpdateHelper upScattend = new UpdateHelper(); try { upScattend.Execute(sbUpdateScAttend); } catch (Exception ex) { Console.WriteLine(ex.Message); } _backgroundWorker.ReportProgress(60); // 處理課程代碼 // 學生取得課程規劃 string qrygpPlan = "SELECT " + "student.id AS student_id" + ",student.ref_graduation_plan_id AS student_gp_id" + ",class.ref_graduation_plan_id AS class_gp_id " + "FROM student " + "LEFT JOIN class " + "ON student.ref_class_id = class.id " + "WHERE student.id IN(" + string.Join(",", studentIDList.ToArray()) + ");"; QueryHelper qhGpPlan = new QueryHelper(); DataTable dtGpPlan = qhGpPlan.Select(qrygpPlan); List <string> noGpPlanStudentIDList = new List <string>(); foreach (DataRow dr in dtGpPlan.Rows) { string sid = dr["student_id"].ToString(); string gpID = ""; // 如果學生有設以學生生身為主 if (dr["class_gp_id"] != null && dr["class_gp_id"].ToString() != "") { gpID = dr["class_gp_id"].ToString(); } if (dr["student_gp_id"] != null && dr["student_gp_id"].ToString() != "") { gpID = dr["student_gp_id"].ToString(); } if (gpID == "") { noGpPlanStudentIDList.Add(sid); } if (!studentGraduationPlanDict.ContainsKey(sid)) { studentGraduationPlanDict.Add(sid, gpID); } } // 有學生沒有課程規劃表 if (noGpPlanStudentIDList.Count > 0) { errorMessage = "沒有設定課程規劃表學生清單:"; dtErrorTable.Rows.Clear(); dtErrorTable.Columns.Clear(); this.dtErrorTable.Columns.Add("student_number"); this.dtErrorTable.Columns.Add("class_name"); this.dtErrorTable.Columns.Add("seat_no"); this.dtErrorTable.Columns.Add("student_name"); this.dtErrorTable.Columns.Add("student_id"); foreach (SmartSchool.Customization.Data.StudentRecord student in students) { if (noGpPlanStudentIDList.Contains(student.StudentID)) { DataRow dr = this.dtErrorTable.NewRow(); dr["student_number"] = student.StudentNumber; dr["class_name"] = student.RefClass.ClassName; dr["seat_no"] = student.SeatNo; dr["student_name"] = student.StudentName; dr["student_id"] = student.StudentID; this.dtErrorTable.Rows.Add(dr); } } e.Cancel = true; return; } // 分類有哪些課程規劃ID並取得資料 List <string> gpIDList = new List <string>(); foreach (string id in studentGraduationPlanDict.Values) { if (string.IsNullOrWhiteSpace(id)) { continue; } if (!gpIDList.Contains(id)) { gpIDList.Add(id); } } // 取得課程規劃內容 string qryGpPlanData = "SELECT id,name,content FROM graduation_plan WHERE id IN(" + string.Join(",", gpIDList.ToArray()) + ") "; DataTable dtGpPlanData = qhGpPlan.Select(qryGpPlanData); Dictionary <string, XElement> gpDataDict = new Dictionary <string, XElement>(); foreach (DataRow dr in dtGpPlanData.Rows) { string id = dr["id"].ToString(); XElement elm = XElement.Parse(dr["content"].ToString()); gpDataDict.Add(id, elm); } // 取得學生修課科目代碼 string qryScAttendSubjectCode = "" + "SELECT " + "sc_attend.id AS sc_attend_id" + ",course.id AS course_id" + ",course.subject AS subject_name" + ",course.subj_level AS subj_level" + ",ref_student_id AS student_id" + ",sc_attend.subject_code " + ", sc_attend.subject_code AS subject_code_old " + "FROM " + "course " + "INNER JOIN sc_attend " + "ON course.id = sc_attend.ref_course_id " + "WHERE ref_student_id IN (" + string.Join(",", studentIDList.ToArray()) + ") " + "AND course.school_year=" + schoolYear + " AND course.semester=" + semester + " AND subject is not null"; QueryHelper qhSubjectCode = new QueryHelper(); dtSubjectCode = qhSubjectCode.Select(qryScAttendSubjectCode); foreach (DataRow dr in dtSubjectCode.Rows) { string sid = dr["student_id"].ToString(); if (studentGraduationPlanDict.ContainsKey(sid)) { string gpid = studentGraduationPlanDict[sid]; if (gpDataDict.ContainsKey(gpid)) { foreach (XElement elm in gpDataDict[gpid].Elements("Subject")) { string subjName = "", subjLevel = "", subjCode = ""; if (elm.Attribute("SubjectName") != null) { subjName = elm.Attribute("SubjectName").Value; } if (elm.Attribute("Level") != null) { subjLevel = elm.Attribute("Level").Value; } if (elm.Attribute("課程代碼") != null) { subjCode = elm.Attribute("課程代碼").Value; } if (dr["subject_name"].ToString() == subjName) { dr["subject_code"] = subjCode; } } } } } MyUserState mus1 = new MyUserState(); mus1.Name = "課程代碼"; mus1.Value = "70"; _backgroundWorker.ReportProgress(70, mus1); //// 回寫課程規劃課程代碼到修課紀錄上科目代碼 //List<string> updateScSubjCodeList = new List<string>(); //foreach (DataRow dr in dtSubjectCode.Rows) //{ // string sc_id = dr["sc_attend_id"].ToString(); // string subj_code = ""; // if (dr["subject_code"] != null) // { // subj_code = dr["subject_code"].ToString(); // } // string updateStr = "UPDATE " + // "sc_attend " + // "SET subject_code = '" + subj_code + "' " + // "WHERE " + // "id =" + sc_id + ";"; // updateScSubjCodeList.Add(updateStr); //} //if (updateScSubjCodeList.Count > 0) //{ // try // { // UpdateHelper uhSubj = new UpdateHelper(); // uhSubj.Execute(updateScSubjCodeList); // } // catch (Exception ex) // { // Console.WriteLine(ex.Message); // } //} _backgroundWorker.ReportProgress(75); #region 寫法 // 2018/5/23 穎驊 筆記 使用ischool API 抓不到 scattend 中的 extensions 資料,故採用SQL 來抓 //List<SHSchool.Data.SHSCAttendRecord> scaList = SHSchool.Data.SHSCAttend.SelectByStudentIDs(sidList); //// 是本學期的修課紀錄(題外話 如果未來覺得 scaList 使用ischool API的抓法太沒效率,可以考慮直接寫一串SQL) //foreach (SHSCAttendRecord data in scaList) //{ // // 本學期的修課紀錄(題外話 如果未來覺得 scaList 使用ischool API的抓法太沒效率,可以考慮直接寫一串SQL) // if (data.Course.SchoolYear == int.Parse(schoolYear) && data.Course.Semester == int.Parse(semester)) // { // if (dataCompareDict.ContainsKey(data.RefStudentID)) // { // if (dataCompareDict[data.RefStudentID].Contains(data.Course.Subject + "_" + data.Course.Level)) // { // scaDuplicateList.Add(data); // 假如有找到重覆的科目級別資料,將 本學期修課紀錄加入List 處理 // } // } // } //} #endregion //取得學生的修課紀錄、學生基本資料、課程名稱、級別 string query2 = string.Format(@"SELECT sc_attend.id ,sc_attend.extensions AS extensions ,student.id AS refStudentID ,student.name AS studentName ,student.student_number AS studentNumber ,student.seat_no AS seatNo ,class.class_name AS className ,class.grade_year AS gradeYear ,course.id AS refCourseID ,course.course_name AS courseName ,course.subject AS subjectName ,course.subj_level AS subjectLevel FROM sc_attend LEFT JOIN student ON sc_attend.ref_student_id =student.id LEFT JOIN class ON student.ref_class_id =class.id LEFT JOIN course ON sc_attend.ref_course_id =course.id WHERE student.status ='1' AND course.school_year = '{0}' AND course.semester = '{1}' AND class.grade_year = '{2}' ORDER BY courseName,className, seatNo ASC", schoolYear, semester, targetGradeYear); DataTable dt_SCAttend = qh1.Select(query2); _backgroundWorker.ReportProgress(90); foreach (DataRow dr in dt_SCAttend.Rows) { if (dataCompareDict.ContainsKey("" + dr["refStudentID"])) { if (dataCompareDict["" + dr["refStudentID"]].Contains(dr["subjectName"] + "_" + dr["subjectLevel"])) { SCAttendRecord scar = new SCAttendRecord(); scar.ID = "" + dr["id"]; scar.Extensions = "" + dr["extensions"]; scar.RefStudentID = "" + dr["refStudentID"]; scar.Name = "" + dr["studentName"]; scar.StudentNumber = "" + dr["studentNumber"]; scar.SeatNo = "" + dr["seatNo"]; scar.RefCourseID = "" + dr["refStudentID"]; scar.ClassName = "" + dr["className"]; scar.GradeYear = "" + dr["gradeYear"]; scar.RefCourseID = "" + dr["refCourseID"]; scar.CourseName = "" + dr["courseName"]; scar.SubjectName = "" + dr["subjectName"]; scar.SubjectLevel = "" + dr["subjectLevel"]; scaDuplicateList.Add(scar); // 假如有找到重覆的科目級別資料,將 本學期修課紀錄加入List 處理 } } } _backgroundWorker.ReportProgress(100); }
private void _backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == 10) { FISCA.Presentation.MotherForm.SetStatusBarMessage("取得基本資料中...", e.ProgressPercentage); } else if (e.ProgressPercentage == 20) { FISCA.Presentation.MotherForm.SetStatusBarMessage("取得修課資料中...", e.ProgressPercentage); } else if (e.ProgressPercentage == 40) { FISCA.Presentation.MotherForm.SetStatusBarMessage("取得成績計算規則資料中...", e.ProgressPercentage); } else if (e.ProgressPercentage == 50) { FISCA.Presentation.MotherForm.SetStatusBarMessage("寫入及格標準、補考標準、學生身分中...", e.ProgressPercentage); } else if (e.ProgressPercentage == 60) { FISCA.Presentation.MotherForm.SetStatusBarMessage("取得課程規劃資料中...", e.ProgressPercentage); } else if (e.ProgressPercentage == 70) { FISCA.Presentation.MotherForm.SetStatusBarMessage("寫入課程代碼中...", e.ProgressPercentage); } else if (e.ProgressPercentage == 75) { FISCA.Presentation.MotherForm.SetStatusBarMessage("取得重覆級別科目中...", e.ProgressPercentage); } else { FISCA.Presentation.MotherForm.SetStatusBarMessage("資料處理中...", e.ProgressPercentage); } MyUserState mus = e.UserState as MyUserState; if (mus != null) { if (mus.Name == "及格補考標準") { if (hasScoreList.Count > 0) { HasPassScoreForm hpsf = new HasPassScoreForm(); hpsf.StartPosition = FormStartPosition.CenterScreen; hpsf.SetDataRows(hasScoreList); hpsf.ShowDialog(); } } if (mus.Name == "課程代碼") { bool isUpdateNull = false; bool isUpdate = false; if (hasSubjectCodeList.Count > 0) { hasSubjectCodeForm hscf = new hasSubjectCodeForm(); hscf.StartPosition = FormStartPosition.CenterScreen; hscf.SetDataRows(hasSubjectCodeList); // 確定覆蓋 if (hscf.ShowDialog() == DialogResult.Yes) { isUpdate = true; } else { // 當選離開時,只更新有空值得課程代碼。 isUpdateNull = true; } } else { isUpdate = true; } List <string> updateScSubjCodeList = new List <string>(); if (isUpdate) { // 回寫課程規劃課程代碼到修課紀錄上科目代碼 foreach (DataRow dr in dtSubjectCode.Rows) { string sc_id = dr["sc_attend_id"].ToString(); string subj_code = ""; if (dr["subject_code"] != null) { subj_code = dr["subject_code"].ToString(); } string updateStr = "UPDATE " + "sc_attend " + "SET subject_code = '" + subj_code + "' " + "WHERE " + "id =" + sc_id + ";"; updateScSubjCodeList.Add(updateStr); } } if (isUpdateNull) { // 回寫課程規劃課程代碼到修課紀錄上科目代碼空值 foreach (DataRow dr in dtSubjectCode.Rows) { bool add = true; string sc_id = dr["sc_attend_id"].ToString(); string subj_code = ""; if (dr["subject_code"] != null) { subj_code = dr["subject_code"].ToString(); } // 原資料 if (dr["subject_code_old"] != null) { if (!string.IsNullOrWhiteSpace(dr["subject_code_old"].ToString()) || string.IsNullOrWhiteSpace(subj_code)) { add = false; } } if (add) { string updateStr = "UPDATE " + "sc_attend " + "SET subject_code = '" + subj_code + "' " + "WHERE " + "id =" + sc_id + ";"; updateScSubjCodeList.Add(updateStr); } } } if (updateScSubjCodeList.Count > 0) { try { UpdateHelper uhSubj = new UpdateHelper(); uhSubj.Execute(updateScSubjCodeList); } catch (Exception ex) { MessageBox.Show("覆蓋課程代碼發生錯誤" + ex.Message); //Console.WriteLine(ex.Message); } } } } }