| 類別/方法 | 用途 | 關鍵屬性/方法 |
|---|---|---|
| StreamReader | 文字檔讀取 | ReadLine(), ReadToEnd(), CurrentEncoding |
| StreamWriter | 文字檔寫入 | WriteLine(), Flush(), AutoFlush |
| SqlParameter | 參數化查詢防注入 | ParameterName, SqlDbType, Value, Direction |
| SqlCommand | 執行 SQL 命令 | ExecuteReader(), ExecuteNonQuery(), ExecuteScalar() |
| XmlDocument | XML DOM 操作 | InnerText(轉義), InnerXml(保留標籤), SelectNodes() |
using (var reader = new StreamReader("data.csv", Encoding.UTF8))
using (var conn = new SqlConnection(connStr))
{
conn.Open();
string line;
while ((line = reader.ReadLine()) != null)
{
// 移除自增 ID 欄位(假設第一欄)
line = Regex.Replace(line, @"^\d+,", "");
var fields = line.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (fields.Length == 10) // 驗證欄位數
{
using (var cmd = new SqlCommand(
"INSERT INTO TargetTable VALUES (@p1,@p2,...@p10)", conn))
{
for (int i = 0; i < 10; i++)
cmd.Parameters.AddWithValue($"@p{i+1}", fields[i]);
cmd.ExecuteNonQuery();
}
}
}
}
// 寫法一:顯式建立參數物件(推薦複雜場景)
var p1 = new SqlParameter("@username", SqlDbType.NVarChar, 50) { Value = uid };
var p2 = new SqlParameter("@password", SqlDbType.NVarChar, 50) { Value = pwd };
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
// 寫法二:AddWithValue 簡潔語法(適用簡單場景)
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", pwd);
核心原則:永不拼接 SQL 字串,所有使用者輸入必須透過參數傳遞。
-- 生成 1-100 數字
SELECT t1.num + t2.num * 10 AS Num
FROM (SELECT 0 num UNION ALL SELECT 1 ... UNION ALL SELECT 9) t1
CROSS JOIN (SELECT 0 num UNION ALL SELECT 1 ... UNION ALL SELECT 9) t2
ORDER BY 1;
-- SQL Server 2005+ ROW_NUMBER() 分頁(標準做法)
DECLARE @Page INT = 2, @PageSize INT = 10;
WITH PagedData AS (
SELECT
ROW_NUMBER() OVER (ORDER BY StuName) AS RowNum,
*
FROM Student
)
SELECT * FROM PagedData
WHERE RowNum BETWEEN (@Page-1)*@PageSize + 1 AND @Page*@PageSize;
int totalRows = GetTotalCount();
int totalPages = (int)Math.Ceiling(totalRows * 1.0 / pageSize);
lblPager.Text = $"{currentPage}/{totalPages}";
// 頁碼跳轉處理
string newText = Regex.Replace(lblPager.Text, @"^\d+/", $"{targetPage}/");
var xml = "- Value < 10
";
var doc = new XmlDocument();
doc.LoadXml(xml);
var node = doc.SelectSingleNode("/root/item");
Console.WriteLine(node.InnerText); // 輸出: Value < 10 (自動解碼)
Console.WriteLine(node.InnerXml); // 輸出: Value < 10 (保留實體)
InnerText:取得/設定純文字內容,自動處理實體編碼/解碼。InnerXml:取得/設定原始 XML 標記內容,不進行編碼轉換。// 定義委派
public delegate void LogHandler(string message);
// 多播委派鏈結
LogHandler logger = Console.WriteLine;
logger += msg => File.AppendAllText("log.txt", msg + Environment.NewLine);
logger += msg => Debug.WriteLine(msg);
// 一次調用觸發所有目標
logger("系統啟動完成");
using 區塊確保釋放。SqlBulkCopy 提升效能。ROW_NUMBER() 或 OFFSET/FETCH (SQL 2012+)。XmlReader 流式讀取降低記憶體壓力。