在 ASP.NET 開發中,經常需要將結構化的文字檔(如 CSV、以特定分隔符號分隔的資料)批次匯入 SQL Server 資料庫。本文提供一個完整的程式碼範例,示範如何使用 StreamReader 逐行讀取檔案、解析欄位,並透過 ADO.NET 寫入資料表。
以下範例假設文字檔每行以 | 分隔四個欄位,對應資料表 TableDX 的 number、name、produce、xinghao 欄位:
StreamReader sr = new StreamReader(@"E:\123.txt"); // 檔案路徑
string oneLine;
while ((oneLine = sr.ReadLine()) != null)
{
string[] str = oneLine.Split('|');
// 建議使用參數化查詢防止 SQL Injection,此處為示範原始邏輯
string sql = "INSERT INTO TableDX (number, name, produce, xinghao) " +
"VALUES ('" + str[0] + "', '" + str[1].Replace("'", "''") + "', '" + str[2] + "', '" + str[3] + "')";
string strConn = "Data Source=.;Initial Catalog=master;User ID=sa;Password=sa";
using (SqlConnection conn = new SqlConnection(strConn))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
int res = cmd.ExecuteNonQuery();
}
}
}
sr.Close();
Response.Write("<script>alert('匯入成功');</script>");
SqlParameter)以確保安全。SqlConnection、SqlCommand、StreamReader 正確釋放資源。為防止 SQL 注入並提升效能,建議將 SQL 改寫如下:
string sql = "INSERT INTO TableDX (number, name, produce, xinghao) VALUES (@num, @name, @prod, @model)";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@num", str[0]);
cmd.Parameters.AddWithValue("@name", str[1]);
cmd.Parameters.AddWithValue("@prod", str[2]);
cmd.Parameters.AddWithValue("@model", str[3]);
cmd.ExecuteNonQuery();
}
本範例展示了基本的文字檔匯入流程。實際專案中應加入錯誤處理(try-catch)、交易控制(SqlTransaction)、批次寫入(SqlBulkCopy)等機制,以應對大量資料與異常情況。