sql?server實現圖片的存入和讀取的流程詳解
首先提醒一下,無論是將圖片存入數據庫,還是從數據庫中讀取,都是采用流的形式進行,雖然,在數據庫中,存儲圖片的類型是Image,但是sql中的Image和C#中的Image不一樣,就如同sql中的null的判斷在C#中得用DBNULL來判斷
先看窗體設計,很簡單,一共就五個控件,名字都沒改,pictureBox1,textBox1,button1,button2,button3(依次從上到下,從左到右),看源碼的時候會看到的

數據庫中表的設計
就一個Image

首先程序運行,可以先選擇一張圖片
文本框中是圖片在本地磁盤上的路徑,在此掩蓋部分

然后點擊,存入數據庫
提示存入成功

在此,將窗體關閉,重新打開,讀取圖片。
至于為什么這么做看到源碼就知道了
重新打開后的

點擊從數據庫中讀取按鈕
拿到了剛才存入的圖片

源碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 讀取數據庫中的圖片
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 選擇圖片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//初始化打開文件 對話框
OpenFileDialog ofdlgTest = new OpenFileDialog();
ofdlgTest.Filter = "*.jpg|*.png"; //文件過濾 篩選可以打開的文件
ofdlgTest.Multiselect = false; //設置不可以選擇多個文件
//顯示文件打開對話框
DialogResult result = ofdlgTest.ShowDialog();
//選擇打開按鈕的時候,將文件名顯示到文本框中
if (result== DialogResult.OK) //判斷是否打開文件
{
this.textBox1.Text = ofdlgTest.FileName;
pictureBox1.Image = Image.FromFile(ofdlgTest.FileName);
}
}
/// <summary>
/// 存入數據庫
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
string constr = "Data Source=.;Initial Catalog=MyFirstDatabase;User Id=sa;PassWord=91811372c";
using(SqlConnection con=new SqlConnection(constr))
{
//sql語句 插入圖片
string sql = "insert into ImageTest values(@UserImage)";
using(SqlCommand com=new SqlCommand(sql,con))
{
byte[] buffer; //將圖片轉換為字節(jié)數組 存入數據庫 textBox1.Text 是文件的路徑
using(FileStream stream = new FileStream(textBox1.Text, FileMode.OpenOrCreate, FileAccess.Read))
{
//通過文件路徑 打開文件
buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length); //轉換后 ,存入buffer中
}
//這個參數 其實 也沒必要聲明 不過習慣使用 帶參數的sql語句了
SqlParameter pms = new SqlParameter("@UserImage", SqlDbType.Image) { Value = buffer };
com.Parameters.Add(pms);
con.Open();
string msg = com.ExecuteNonQuery()>0?"存入成功":"存入失敗";
MessageBox.Show(msg);
}
}
}
/// <summary>
/// 從數據庫中讀取
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
string conStr = "Data Source=.;Initial Catalog=MyFirstDatabase;User Id=sa;PassWord=自己的密碼";
using(SqlConnection con=new SqlConnection(conStr))
{
//sql語句
string sql = "select * from ImageTest";
using (SqlCommand com = new SqlCommand(sql, con))
{
con.Open();
using(SqlDataReader reader=com.ExecuteReader())
{
if (reader.HasRows)
{
//聲明一字節(jié)數組 將數據庫中的圖片現存入字節(jié)數組中
byte[] imageByte;
//在這我是知道里面就一張圖,所以這么寫的,個人根據實際情況,可做修改
while(reader.Read())
{
//將圖片轉換為字節(jié)數組
imageByte = (byte[])reader["UserImage"];
//轉換為文件流
MemoryStream stream = new MemoryStream(imageByte);
//再將文件流 轉換為 圖像
Bitmap bitmap = new Bitmap(stream);
pictureBox1.Image = bitmap;
}
}
}
}
}
}
}
}
到此這篇關于sql server實現圖片的存入和讀取的流程詳解的文章就介紹到這了,更多相關sql server圖片存入和讀取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SQLSERVER查看數據庫日志方法與語句示例代碼(已親測)
在數據庫使用很久后日志文件會累計的越來越大,如果硬盤空間不足可能會導致宕機,下面這篇文章主要給大家介紹了關于SQLSERVER查看數據庫日志方法與語句的相關資料,需要的朋友可以參考下2023-03-03
SQL 復合查詢條件(AND,OR,NOT)對NULL值的處理方法
在SQL的3值邏輯下,一個查詢條件可以產生以下三種情況:TRUE,FALSE,NULL。只有那些滿足WHERE子句的值是TRUE的記錄才出現在結果表中。2011-04-04
Activiti-Explorer使用sql server數據庫實現方法
本文主要介紹Activiti-Explorer使用sql server數據庫,這里整理了詳細的資料來說明Activiti-Explorer使用SQL Server的實例,有興趣的小伙伴可以參考下2016-08-08

