//把图片读到pictureBox,再写入数据库SqlConnection conn=new SqlConnection(@"data source=chenyuming2004\VSdotNET;uid=sa;pwd=cym;database=lhf");
conn.Open();
SqlCommand cmd=new SqlCommand("insert into fuser values ('1a','1b',@i)",conn);
byte[] ib=new Byte[60000];
FileStream fs=new FileStream(@"D:\windows temp\temp\1.jpg",FileMode.Open ,FileAccess.Read );
fs.Read(ib,0,60000);
cmd.Parameters.Add("@i",SqlDbType.Image,(int)fs.Length);
cmd.Parameters["@i"].Value=ib;
cmd.ExecuteNonQuery();
conn.Close();-------------------------------------------------------
//从数据库读图片到pictureboxSqlConnection conn=new SqlConnection(@"data source=chenyuming2004\VSdotNET;uid=sa;pwd=cym;database=lhf");
conn.Open();
SqlCommand cmd=new SqlCommand("select 照片 from fuser where password='1b'",conn);
SqlDataReader reader=cmd.ExecuteReader();
reader.Read();
MemoryStream buf=new MemoryStream((byte[])reader[0]);
Image image=Image.FromStream(buf,true);
pictureBox1.Image=image;

解决方案 »

  1.   

    同意,不过图片可以使用二进制方式存到数据库中,也可以现使用Base64编码以后一字符串方式保存到数据库中。显示的时候解码就可以了。
      

  2.   

    最好还是用字节的形式存储,Base64太浪费空间了
      

  3.   

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Data.OleDb;
    using System.IO;namespace FCXS.XMZL
    {
    /// <summary>
    /// FrmPhoto 的摘要说明。
    /// </summary>
    public class FrmPhoto : System.Windows.Forms.Form
    {
    private System.Windows.Forms.Panel panel1;
    private System.Windows.Forms.PictureBox pbx;
    private System.Windows.Forms.Splitter splitter1;
    private System.Windows.Forms.Panel panel2;
    private System.Windows.Forms.Button button3;
    private System.Windows.Forms.Button button2;
    private System.Windows.Forms.ComboBox comboBox1;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Label label1;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null; public FrmPhoto()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent(); //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if(components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #region Windows 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FrmPhoto));
    this.panel1 = new System.Windows.Forms.Panel();
    this.pbx = new System.Windows.Forms.PictureBox();
    this.splitter1 = new System.Windows.Forms.Splitter();
    this.panel2 = new System.Windows.Forms.Panel();
    this.button3 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.comboBox1 = new System.Windows.Forms.ComboBox();
    this.button1 = new System.Windows.Forms.Button();
    this.label1 = new System.Windows.Forms.Label();
    this.panel1.SuspendLayout();
    this.panel2.SuspendLayout();
    this.SuspendLayout();
    // 
    // panel1
    // 
    this.panel1.Controls.Add(this.pbx);
    this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
    this.panel1.Location = new System.Drawing.Point(0, 0);
    this.panel1.Name = "panel1";
    this.panel1.Size = new System.Drawing.Size(672, 408);
    this.panel1.TabIndex = 0;
    // 
    // pbx
    // 
    this.pbx.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
    this.pbx.Dock = System.Windows.Forms.DockStyle.Fill;
    this.pbx.Image = ((System.Drawing.Image)(resources.GetObject("pbx.Image")));
    this.pbx.Location = new System.Drawing.Point(0, 0);
    this.pbx.Name = "pbx";
    this.pbx.Size = new System.Drawing.Size(672, 408);
    this.pbx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
    this.pbx.TabIndex = 0;
    this.pbx.TabStop = false;
    // 
    // splitter1
    // 
    this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
    this.splitter1.Location = new System.Drawing.Point(0, 408);
    this.splitter1.Name = "splitter1";
    this.splitter1.Size = new System.Drawing.Size(672, 3);
    this.splitter1.TabIndex = 1;
    this.splitter1.TabStop = false;
    // 
    // panel2
    // 
    this.panel2.Controls.Add(this.button3);
    this.panel2.Controls.Add(this.button2);
    this.panel2.Controls.Add(this.comboBox1);
    this.panel2.Controls.Add(this.button1);
    this.panel2.Controls.Add(this.label1);
    this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
    this.panel2.Location = new System.Drawing.Point(0, 411);
    this.panel2.Name = "panel2";
    this.panel2.Size = new System.Drawing.Size(672, 58);
    this.panel2.TabIndex = 2;
    // 
    // button3
    // 
    this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
    this.button3.Location = new System.Drawing.Point(499, 17);
    this.button3.Name = "button3";
    this.button3.TabIndex = 10;
    this.button3.Text = "关闭";
    this.button3.Click += new System.EventHandler(this.button3_Click);
    // 
    // button2
    // 
    this.button2.Enabled = false;
    this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
    this.button2.Location = new System.Drawing.Point(419, 17);
    this.button2.Name = "button2";
    this.button2.TabIndex = 9;
    this.button2.Text = "保存";
    this.button2.Click += new System.EventHandler(this.button2_Click);
    // 
    // comboBox1
    // 
    this.comboBox1.Items.AddRange(new object[] {
       "正常",
       "拉伸",
       "自动",
       "居中"});
    this.comboBox1.Location = new System.Drawing.Point(283, 17);
    this.comboBox1.Name = "comboBox1";
    this.comboBox1.Size = new System.Drawing.Size(128, 20);
    this.comboBox1.TabIndex = 7;
    this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
    // 
    // button1
    // 
    this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
    this.button1.Location = new System.Drawing.Point(99, 17);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(96, 23);
    this.button1.TabIndex = 6;
    this.button1.Text = "打开图片文件";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 
    // label1
    // 
    this.label1.Location = new System.Drawing.Point(203, 25);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(120, 16);
    this.label1.TabIndex = 8;
    this.label1.Text = "设置显示模式";
    // 
    // FrmPhoto
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(672, 469);
    this.ControlBox = false;
    this.Controls.Add(this.panel2);
    this.Controls.Add(this.splitter1);
    this.Controls.Add(this.panel1);
    this.Name = "FrmPhoto";
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    this.Text = "平面图";
    this.Load += new System.EventHandler(this.FrmPhoto_Load);
    this.panel1.ResumeLayout(false);
    this.panel2.ResumeLayout(false);
    this.ResumeLayout(false); }
    #endregion /// <summary>
    /// 打开图片
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button1_Click(object sender, System.EventArgs e)
    {
    try
    {
    System.Windows.Forms.OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter ="位图文件(*.bmp)|*.bmp|jpg文件(*.jpg)|*.jpg|gif文件(*.gif)|*.gif|所有文件(*.*)|*.*";
    ofd.FilterIndex =0;
    if (ofd.ShowDialog()==System.Windows.Forms.DialogResult.OK)
    {
    this.pbx.Image = Image.FromFile(ofd.FileName.ToString());
    this.filename = ofd.FileName.ToString();
    ///保存按钮有效
    this.button2.Enabled = true;
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
      

  4.   


    private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    try
    {
    switch (this.comboBox1.SelectedIndex)
    {
    case 0:
    this.pbx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Normal;
    break;
    case 1:
    this.pbx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
    break;
    case 2:
    this.pbx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
    break;
    case 3:
    this.pbx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
    break;
    default:
    //this.pbx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Normal;
    break;
    }
    }
    catch (Exception Ex)
    {
    MessageBox.Show(Ex.Message);
    }
    // MessageBox.Show(this.comboBox1.SelectedText);
    } /// <summary>
    /// 退出
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button3_Click(object sender, System.EventArgs e)
    {
    this.Close();
    } private string filename ="";
    public string getsql ="";
    public string updatesql ="update_xmzl_photo";
    /// <summary>
    /// 数据表名
    /// </summary>
    public string tbname ="xmzl";
    public string bh ="";
    public string bh2 ="";
     
        
    /// <summary>
    /// 加载图片
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void FrmPhoto_Load(object sender, System.EventArgs e)
    {
    byte[] buffByte = null;
    try
    {
    System.Data.OleDb.OleDbCommand mycmd = new System.Data.OleDb.OleDbCommand(getsql,DB.OleConn());
    if (mycmd.Connection.State != System.Data.ConnectionState.Open)
    {
    mycmd.Connection.Open();
    }
    System.Data.OleDb.OleDbDataReader myrd = mycmd.ExecuteReader();
    while (myrd.Read())
    {
    buffByte = ((byte[])myrd[0]);
    }
    myrd.Close();
    mycmd.Connection.Close();
    //将图像的字节数组放入内存流
    System.IO.MemoryStream ms = new System.IO.MemoryStream(buffByte);
    //通过流对象建立Bitmap
    System.Drawing.Bitmap bmp = new Bitmap(ms);
    this.pbx.Image = bmp;// if (myrd.HasRows)
    // {
    // myrd.Read();
    // if (System.NullReferenceException.Equals(myrd["image"],null))
    // {
    // return;
    // }
    // if (myrd["image"].ToString().Length ==0)
    // {
    // return;
    // }
    // System.IO.MemoryStream mstream = new System.IO.MemoryStream( (byte[])  myrd["image"],0,myrd["image"].ToString().Length);
    // this.pbx.Image = Image.FromStream(mstream);
    // mstream.Close();
    // } }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message+",图片不存在!");
    }            
    } /// <summary>
    /// 保存图片
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button2_Click(object sender, System.EventArgs e)
    {
    try
    {
    System.IO.FileInfo fs = new System.IO.FileInfo(this.filename);
    if (!fs.Exists)
    {
    MessageBox.Show("无效的文件名!");
    return;
    }
    //创建一字节数组,用来存储图像文件.(数组的长度是图像文件的长度)
    byte[] Content=new byte[fs.Length];
    //打开文件并用他初始化一个文件流对象
    FileStream ImageFileStream=fs.OpenRead();
    //将文件内容写入字节数组
    ImageFileStream.Read(Content,0,Content.Length);
    //关闭文件流
    ImageFileStream.Close(); //创建一个Sql命令对象,用来插入记录
    System.Data.OleDb.OleDbCommand mycmd = new System.Data.OleDb.OleDbCommand(updatesql,DB.OleConn());
    mycmd.CommandType = CommandType.StoredProcedure;
    mycmd.Parameters.Add("@image",System.Data.OleDb.OleDbType.VarBinary);
    mycmd.Parameters.Add("@bh",OleDbType.VarChar,20);
    mycmd.Parameters.Add("@bh2",System.Data.OleDb.OleDbType.VarChar,20);
    mycmd.Parameters.Add("@tbname",System.Data.OleDb.OleDbType.VarChar,50); mycmd.Parameters["@image"].Value = Content;
    mycmd.Parameters["@bh"].Value =bh;
    mycmd.Parameters["@bh2"].Value = bh2;
    mycmd.Parameters["@tbname"].Value = tbname;
    //打开数据库连接
    if (mycmd.Connection.State!=ConnectionState.Open)
    {
    mycmd.Connection.Open();
    }
    //执行 Sql 语句
    mycmd.ExecuteNonQuery();
    //关闭数据库连接
    mycmd.Connection.Close(); MessageBox.Show("图像文件 " + fs.FullName + " 成功上传到数据库!");
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

    }  
    }
    }
      

  5.   

    /**********************************************************************************
    *功能:更新图片
    *日期:20040719
    *作者:李洪喜
    *参数:@image 是图片,@bh 是编码 ,@bh2 附属编码 ,@tbname 是表名
    *drop proc update_xmzl_photo
    ******************************************************************************************/
    CREATE proc update_xmzl_photo  
      @image as image,                           ----图片  
      @bh  as varchar(20),                       ---编号(主要)  值  
      @bh2 as varchar(20),                      ---次要编号   值  
      @tbname as varchar(40)                ---要更新的表名  
        
    as  
     if (lower(@tbname) ='xmzl')   
       begin  
          update xmzl set xmzl_photo = @image where xmzl_bh =@bh  
       end  
     if (lower(@tbname)='lfmx')  
        begin  
           update lfmx set lfmx_photo = @image where lfmx_bh =@bh and lfmx_xmbh =@bh2  
        end  
     if (lower(@tbname) ='hxzl')  
        begin  
            update hxzl set hxzl_photo = @image where hxzl_bh = @bh and hxzl_xmbh = @bh2  
        end  
     if (lower(@tbname )='ggxm')  
      begin  
          update ggxm set ggxm_photo = @image where ggxm_bh = @bh   
      end
    GO
      

  6.   

    private void Button1_Click(object sender, System.EventArgs e)
    {
    int ImgSize;
    string PicType;
    Stream PicStream;
    ImgSize=imagefile.PostedFile.ContentLength;
    if(ImgSize>120000)
    {
    Response.Write("无法保存,文件大于12k");

    }
    else
    {
    PicType=imagefile.PostedFile.ContentType;
    PicStream=imagefile.PostedFile.InputStream;
    byte[] ImgContent=new byte[ImgSize];
    int intStatus=PicStream.Read(ImgContent,0,ImgSize);
    string connstr=ConfigurationSettings.AppSettings["connstring"];
    SqlConnection connection = new SqlConnection(connstr);
    SqlCommand command = new SqlCommand("INSERT INTO shopitem(thepic,itemtype) VALUES (@imgdata,@imgtype)", connection );
    command.Parameters.Add("@imgdata",SqlDbType.Image);
    command.Parameters["@imgdata"].Value=ImgContent;
    command.Parameters.Add("@imgtype",SqlDbType.VarChar);
    command.Parameters["@imgtype"].Value=PicType;
    connection.Open();
    command.ExecuteNonQuery();
    connection.Close();
    Response.Write(ImgSize);
    imagefile.Visible=false;
    }
    }