GridView 顯示資料正常,但 foreach (GridViewRow dr in GridView2.Rows) 遍歷寫入 SQL Server 時,資料庫無新增記錄,無報錯。
GridView2.DataBind() 僅在 !IsPostBack 執行,PostBack 時未清空資料源導致 Rows 為空。Label3 若在 TemplateField 中,需確認 dr.FindControl("Label3") 非 null,建議加斷點檢查。db.Insert() 內部 ExecuteNonQuery() 返回值,若為 -1 表示失敗。確認連線字串、權限、表結構一致。int.Parse(((Label)dr.FindControl("Label3")).Text) 若 Text 為空或非數字會拋出異常,需 TryParse 防禦。using (var conn = new SqlConnection(connStr))
using (var cmd = conn.CreateCommand()) {
conn.Open();
var tran = conn.BeginTransaction();
cmd.Transaction = tran;
try {
foreach (GridViewRow row in GridView2.Rows) {
if (row.RowType != DataControlRowType.DataRow) continue;
var lbl = row.FindControl("Label3") as Label;
if (lbl == null || !int.TryParse(lbl.Text, out int typeId)) continue;
cmd.CommandText = @"INSERT INTO testdetail (examinationid, typekind, typeid, score)
VALUES (@examId, '單選題', @typeId, @score)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@examId", afterID);
cmd.Parameters.AddWithValue("@typeId", typeId);
cmd.Parameters.AddWithValue("@score", int.Parse(txtSingleFen.Text));
cmd.ExecuteNonQuery();
}
tran.Commit();
} catch (Exception ex) {
tran.Rollback();
// 記錄日誌 / 顯示錯誤
}
}
using 確保連線關閉。TryParse、null 檢查、RowType 過濾。