標籤:os io 檔案 資料 cti ar new 資料庫
資料庫的Image欄位儲存的是位元組,所以寫入資料庫Image欄位和從資料庫Image欄位讀取的內容都應該為位元組.
1、資料庫Image欄位讀寫檔案
寫檔案:寫檔案的過程為將檔案以流檔案形式開啟並將內容讀取到一個byte數組,然後將此byte數組寫入資料庫的Image欄位。
源碼:
FileInfo finfo=new FileInfo("檔案名稱"); //絕對路徑
if(finfo.Exists)
{
SqlConnection conn=new SqlConnection("連接字串");
SqlCommand InsertCommand=new SqlCommand();
InsertCommand.Connection=conn;
InsertCommand.CommandText="Insert into 表名(Image欄位名) values(@Content)";
InsertCommand.Parameters.Add("@Content",SqlDbType.Image,(int)finfo.Length,"Image欄位名"); //注意,此處參數Size為寫入的位元組數
//讀取檔案內容,寫入byte數組
byte[] content=new byte[finfo.Length];
FileStream stream=finfo.OpenRead();
stream.Read(content,0,content.Length);
stream.Close();
InsertCommand.Parameters["@Content"].Value=content; //為參數賦值
try
{
conn.Open();
InsertCommand.ExcuteNonQuery();
}
finally
{
conn.Close();
}
}
讀檔案:讀檔案的過程為從資料庫的Image欄位讀取內容儲存到byte數組,然後將此byte數組以檔案流形式寫入檔案。
源碼:
byte[] content;
SqlConnetion conn=new SqlConnection("連接字串");
SqlDataAdapter da=new SqlDataAdapter("Select Image欄位名 from 表名",conn);
DataSet ds=new DataSet();
da.Fill(da,"word");
DataRow dr=ds.Tables["word"].Rows[0]; //將讀取的第一行內容儲存到dr
content=(byte[])dr["Image欄位名"];
int ArraySize=content.GetUpperBound(0);
FileStream stream=new FileStream("檔案名稱",FileMode.OpenOrCreate,FileAccess.Write);
stream.Write(content,0,ArraySize);
stream.Close();
2、資料庫Image欄位讀寫圖片
綁定到控制項的方式:
通過將Image欄位綁定到PictureBox實現。檔案中我提供了一個執行個體,要正常運行需要在Northwind中添加資料庫表Employees,數 據庫表的結構為EmployeeID Int(4) 自動增 長,FirstName nvarchar(10),LastName nvarchar(20),Photo image(16) null。
直接用SqlCommand實現:
其 實把握住Image欄位存的是byte類型資料,用SqlCommand實現添加、修改就很簡單了,跟文本的區別就是在讀出的時候需要將byte類型資料 轉化為Image圖片,在寫入時需要將Image圖片以流的形式轉為為byte數組,然後再將byte數組儲存到Image欄位。
執行個體:
comm = "Insert into MyEmployees(FirstName,LastName,Photo) values(@FName,@LName,@Photo)";
SqlCommand command=new SqlCommand(comm);
command.Connection = conn; //建立Parameter
command.Parameters.Add("@FName",SqlDbType.NVarChar);
command.Parameters[0].Value = textBox1.Text;
command.Parameters.Add("@LName", SqlDbType.NVarChar);
command.Parameters[1].Value = textBox2.Text;
command.Parameters.Add("@Photo",SqlDbType.Image);
command.Parameters[2].Value = imgByte;
其中imgByte為Byte數組,通過FileStream的Read填充的byte資料。
DataRow dr = dt.Tables[0].Rows[0];
byte[] br = null;
MemoryStream ms = new MemoryStream();
if (dr["image1"].ToString() != "")
{
br = (byte[])dr["image1"];
ms = new MemoryStream(br, 0, br.Length);
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
this.pictureBox1.Image = Image.FromStream(ms);
ms.Close();
}
else
{
this.pictureBox1.Image = null;
}