承接前文,本文專注於從 SQL Server 讀取二進位資料並還原為檔案,以及解決「另存為不同檔案格式」的實務問題。
SqlDataReader dr = null;
SqlConnection objCn = new SqlConnection();
objCn.ConnectionString = "Data Source=(local);User ID=sa;Password=;Initial Catalog=Test";
SqlCommand cm = new SqlCommand();
cm.Connection = objCn; // 注意:原代碼有誤寫為 cn
cm.CommandType = CommandType.Text;
cm.CommandText = "SELECT " + fieldName + " FROM " + tableName + " WHERE ID=1";
dr = cm.ExecuteReader();
byte[] fileData = null;
if (dr.Read())
{
fileData = (byte[])dr[0];
}
dr.Close();
// 寫入檔案 - 方式一:FileStream 直接寫入
FileStream fs = new FileStream(fileName, FileMode.Create);
fs.Write(fileData, 0, fileData.Length);
fs.Close();
原代碼使用 FileInfo.OpenWrite() 會保留原檔案屬性,導致無法正確另存為不同副檔名(如 .doc)。改用 BinaryWriter 可精確控制輸出:
FileStream fs = new FileStream(fileName, FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(fileData, 0, fileData.Length);
bw.Close();
fs.Close();
System.Data.SqlClient 與 System.IO 命名空間using 區塊確保資源釋放