亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

sql?server實現(xiàn)圖片的存入和讀取的流程詳解

 更新時間:2024年05月23日 10:35:16   作者:益生菌凍干粉  
這篇文章主要介紹了sql?server實現(xiàn)圖片的存入和讀取的詳細流程,文中通過代碼示例和圖文結合的方式給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

首先提醒一下,無論是將圖片存入數(shù)據(jù)庫,還是從數(shù)據(jù)庫中讀取,都是采用流的形式進行,雖然,在數(shù)據(jù)庫中,存儲圖片的類型是Image,但是sql中的Image和C#中的Image不一樣,就如同sql中的null的判斷在C#中得用DBNULL來判斷

先看窗體設計,很簡單,一共就五個控件,名字都沒改,pictureBox1,textBox1,button1,button2,button3(依次從上到下,從左到右),看源碼的時候會看到的

數(shù)據(jù)庫中表的設計

就一個Image

首先程序運行,可以先選擇一張圖片

文本框中是圖片在本地磁盤上的路徑,在此掩蓋部分

然后點擊,存入數(shù)據(jù)庫

提示存入成功

在此,將窗體關閉,重新打開,讀取圖片。

至于為什么這么做看到源碼就知道了

重新打開后的

點擊從數(shù)據(jù)庫中讀取按鈕

拿到了剛才存入的圖片

源碼:

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 讀取數(shù)據(jù)庫中的圖片
{
    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>
        /// 存入數(shù)據(jù)庫
        /// </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é)數(shù)組 存入數(shù)據(jù)庫   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中
                    }

                    //這個參數(shù) 其實 也沒必要聲明 不過習慣使用 帶參數(shù)的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>
        /// 從數(shù)據(jù)庫中讀取
        /// </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é)數(shù)組   將數(shù)據(jù)庫中的圖片現(xiàn)存入字節(jié)數(shù)組中
                            byte[] imageByte;
							//在這我是知道里面就一張圖,所以這么寫的,個人根據(jù)實際情況,可做修改
                           while(reader.Read())
                            {
                                //將圖片轉換為字節(jié)數(shù)組
                                imageByte = (byte[])reader["UserImage"];

                                //轉換為文件流
                                MemoryStream stream = new MemoryStream(imageByte);
                                //再將文件流 轉換為 圖像
                                Bitmap bitmap = new Bitmap(stream);
                                pictureBox1.Image = bitmap;
                            }
                        }
                    }
                }
            }
        }
    }
}

到此這篇關于sql server實現(xiàn)圖片的存入和讀取的流程詳解的文章就介紹到這了,更多相關sql server圖片存入和讀取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論