string sqlStr = "SELECT * FROM pub_info";
conn = new SqlConnection(connString);
adapter = new SqlDataAdapter(sqlStr, conn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.UpdateCommand = builder.GetUpdateCommand();
dataset = new DataSet();
adapter.Fill(dataset, "pub_info");
// 將文字方塊繫結至 pr_info 欄位
textBox1.DataBindings.Add(new Binding("Text", dataset, "pub_info.pr_info"));
// 填充列表方塊顯示主鍵
for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
{
listBox1.Items.Add(dataset.Tables[0].Rows[i][0]);
}
private void ShowImage()
{
byte[] bytes = (byte[])dataset.Tables[0].Rows[listBox1.SelectedIndex][1];
MemoryStream memStream = new MemoryStream(bytes);
try
{
Bitmap img = new Bitmap(memStream);
pictureBox1.Image = img;
}
catch
{
pictureBox1.Image = null; // 資料非有效圖片格式時清空
}
}
private void buttonUpdateImage_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.ShowDialog();
if (!string.IsNullOrWhiteSpace(dlg.FileName))
{
using (Stream fs = dlg.OpenFile())
{
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, bytes.Length);
dataset.Tables[0].Rows[listBox1.SelectedIndex][1] = bytes;
}
ShowImage();
}
}
關鍵點:使用 SqlCommandBuilder 自動產生更新命令,配合 MemoryStream 將位元組陣列轉為 Bitmap 顯示,異動直接寫入 DataSet 最後統一 Update 回資料庫。