1
我無法將圖片插入到數據庫中。這是我的示例代碼。我可以從我的計算機中選擇圖像並顯示在圖片框中。一旦我嘗試存儲顯示的圖像在圖片框中向數據庫表示對象引用未設置爲對象的實例。c#將圖片存儲到數據庫
這是我的示例代碼。
namespace picutre_storage
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection
(@"User ID=sa;Password=password123;Initial Catalog=picuture;Persist Security Info=True;Data Source=ENMEDIA-EA6278E\ENMEDIA");
//I have used a table named "tblUsers" and fill the fields
SqlCommand cmd = new SqlCommand("INSERT INTO BLOBTest (BLOBData) VALUES (@BLOBData)", con);
//Save image from PictureBox into MemoryStream object.
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms,ImageFormat.Bmp);
//Read from MemoryStream into Byte array.
Byte[] bytBLOBData = new Byte[ms.Length];
ms.Position = 0;
ms.Read(bytBLOBData, 0, Convert.ToInt32(ms.Length));
//Create parameter for insert statement that contains image.
SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, false,
0, 0, null, DataRowVersion.Current, bytBLOBData);
cmd.Parameters.Add(prm);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{ MessageBox.Show(""+ex); }
}
private void button3_Click(object sender, EventArgs e)
{
try
{
//Getting The Image From The System
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
pictureBox2.Image = new Bitmap(open.FileName);
}
}
catch (Exception)
{
throw new ApplicationException("Failed loading image");
}
}
2.有提前
對於點2:我在救我的數據庫,我節約了圖像長度的列。 – Marco 2011-05-11 08:08:17
總是將你的SqlConnection對象封裝在一個using語句中,否則你將有一個連接池泄漏!:)使用(var cnn = new SqlConnection(...)){....}(在上面的代碼中 - 一旦發生錯誤,您將遇到問題 - 您的連接不會被關閉) – Nathan 2011-05-11 08:09:44
您可以使用ms.ToArray()獲取字節數組。無需進行手動分配。 – 2011-05-11 08:11:07