點擊按鈕讀取兩張表(MAT_NR、PANELID),組合字符串寫入指定路徑文本文件。
private void GetData() {
try {
DataTable dtMat = SQLUtility.Select("SELECT MAT_NR FROM ADE_LOS WHERE LOS_NR = @los", new SqlParameter("@los", txtLOS_NR.Text.Trim()));
DataTable dtPanel = SQLUtility.Select("SELECT PANELID FROM FCBDB.dbo.PANELTAB WHERE LOSID = @los", new SqlParameter("@los", txtLOS_NR.Text.Trim()));
var sb = new StringBuilder();
foreach (DataRow row in dtMat.Rows) sb.AppendLine($"MAT_NR={row[0]}");
foreach (DataRow row in dtPanel.Rows) sb.AppendLine($"PAN={row[0]}");
string filePath = @"C:\Export\data.txt"; // 指定目標路徑
File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
MessageBox.Show("導出成功:" + filePath);
} catch (Exception ex) {
MessageBox.Show("錯誤:" + ex.Message);
}
}
@los)防止 SQL 注入,原代碼字符串拼接極不安全。StringBuilder 高效拼接大量字符串,避免頻繁內存分配。File.WriteAllText(path, content, encoding) 一次性寫入文件,自動創建/覆蓋、關閉流,極其便捷。SaveFileDialog 獲取,而非硬編碼。若數據量大(>10萬行),應使用 StreamWriter 流式寫入並配合 async/await 避免 UI 凍結:
using (var sw = new StreamWriter(filePath, false, Encoding.UTF8)) {
foreach (var row in dtMat.Rows) await sw.WriteLineAsync($"MAT_NR={row[0]}");
// ...
}