Winform如何存入、读取SQL SERVER数据库图片

转载: http://www.jaron.cn

数据库字段简化为二个:imgtitle和imgdata。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Data.SqlClient;

namespace WindowsApplication21
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  private System.Windows.Forms.Button button1;
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;
  private string ConnectionString = "Integrated Security=SSPI;Initial Catalog=;Data Source=localhost;";
  private SqlConnection conn = null;
  private SqlCommand cmd = null;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.PictureBox pic1;
  private System.Windows.Forms.OpenFileDialog openFileDialog1;
  private string sql = null;
  private System.Windows.Forms.Label label2;
  private string nowId=null;

 public Form1()
 {
  //
  // Windows 窗体设计器支持所必需的
  //
  InitializeComponent();
  conn = new SqlConnection(ConnectionString);

  //
  // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
  //
 }

 /// <summary>
 /// 清理所有正在使用的资源。
 /// </summary>
 protected override void Dispose( bool disposing )
 {
  if (conn.State == ConnectionState.Open)
   conn.Close();
  if( disposing )
  {
   if (components != null)
   {
    components.Dispose();
   }
  }
  base.Dispose( disposing );

 }

 #region Windows Form Designer generated code
 /// <summary>
 /// 设计器支持所需的方法 - 不要使用代码编辑器修改
 /// 此方法的内容。
 /// </summary>
 private void InitializeComponent()
 {
  this.button1 = new System.Windows.Forms.Button();
  this.pic1 = new System.Windows.Forms.PictureBox();
  this.button2 = new System.Windows.Forms.Button();
  this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
  this.label2 = new System.Windows.Forms.Label();
  this.SuspendLayout();
  //
  // button1
  //
  this.button1.Location = new System.Drawing.Point(0, 40);
  this.button1.Name = "button1";
  this.button1.Size = new System.Drawing.Size(264, 48);
  this.button1.TabIndex = 0;
  this.button1.Text = "加入新的图片";
  this.button1.Click += new System.EventHandler(this.button1_Click);
  //
  // pic1
  //
  this.pic1.Location = new System.Drawing.Point(280, 8);
  this.pic1.Name = "pic1";
  this.pic1.Size = new System.Drawing.Size(344, 264);
  this.pic1.TabIndex = 3;
  this.pic1.TabStop = false;
  //
  // button2
  //
  this.button2.Location = new System.Drawing.Point(0, 104);
  this.button2.Name = "button2";
  this.button2.Size = new System.Drawing.Size(264, 40);
  this.button2.TabIndex = 4;
  this.button2.Text = "从数据库中恢复图像";
  this.button2.Click += new System.EventHandler(this.button2_Click);
  //
  // openFileDialog1
  //
  this.openFileDialog1.Filter = "\"图像文件(*.jpg,*.bmp,*.gif)|*.jpg|*.bmp|*.gif\"";
  //
  // label2
  //
  this.label2.Location = new System.Drawing.Point(0, 152);
  this.label2.Name = "label2";
  this.label2.Size = new System.Drawing.Size(264, 48);
  this.label2.TabIndex = 5;
  //
  // Form1
  //
  this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
  this.ClientSize = new System.Drawing.Size(632, 273);
  this.Controls.AddRange(new System.Windows.Forms.Control[] {
    this.label2,
    this.button2,
    this.pic1,
    this.button1});
  this.Name = "Form1";
  this.Text = "Form1";
  this.Load += new System.EventHandler(this.Form1_Load);
  this.ResumeLayout(false);

 }
 #endregion
 
 /// <summary>
 /// 应用程序的主入口点。
 /// </summary>
 [STAThread]
 static void Main()
 {
  Application.Run(new Form1());
 }

 private void button1_Click(object sender, System.EventArgs e)
 {
  openFileDialog1.ShowDialog ();
  
  if (openFileDialog1.FileName.Trim()!="")
  {
   FileInfo fi = new FileInfo(openFileDialog1.FileName);

   string imgtitle=openFileDialog1.FileName;
   int imgdatalen=(int)fi.Length;
   byte[] imgdata = new byte[imgdatalen];
  
   Stream imgdatastream=fi.OpenRead();
   int n=imgdatastream.Read(imgdata,0,imgdatalen);


   if( conn.State == ConnectionState.Open)
    conn.Close();
   ConnectionString ="Integrated Security=SSPI;" + "Initial Catalog=mydb;" +"Data  Source=localhost;";
   conn.ConnectionString = ConnectionString;


 try
 {
  string mySelectQuery = "INSERT INTO ImageStore(imgtitle,imgdata) VALUES (@imgtitle, @imgdata )";
  //string mySelectQuery="UPDATE ImageStore set imgtitle=@imgtitle,imgdata=@imgdata" ;
  SqlCommand myCommand = new SqlCommand(mySelectQuery, conn);

  SqlParameter paramTitle = new SqlParameter("@imgtitle", SqlDbType.VarChar,50 );
  paramTitle.Value = imgtitle;
  myCommand.Parameters.Add( paramTitle);

  SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );
  paramData.Value = imgdata;
  myCommand.Parameters.Add( paramData );

  conn.Open();
  int numRowsAffected = myCommand.ExecuteNonQuery();
  conn.Close();
 }
 catch(Exception err)
 {
  MessageBox.Show("您输入名称可能在数据库中已存在或输入为空,请检查!"+err.ToString() );
 }
 finally
 {}
}

}

 private void Form1_Load(object sender, System.EventArgs e)
 {
 }

 private void button2_Click(object sender, System.EventArgs e)
 {
  //打开数据库连接
  if( conn.State == ConnectionState.Open)
   conn.Close();
  ConnectionString ="Integrated Security=SSPI;" + "Initial Catalog=mydb;" +"Data Source=localhost;";
  conn.ConnectionString = ConnectionString;

  // 创建数据适配器
  string sql="SELECT * FROM ImageStore" ;
  SqlCommand command = new SqlCommand(sql, conn);
 
  try
  {conn.Open();}
  catch(Exception newerr)
  {
   MessageBox.Show(" 不能打开数据联接!") ;
  }
  finally
  {}

  SqlDataReader dr = command.ExecuteReader();
  if(dr.Read())
  {
   FileInfo fi = new FileInfo("temp");
   FileStream myStream=fi.Open(FileMode.Create);
   byte[] mydata=((byte[])dr["imgdata"]);
   //label2.Text="您现在看到的是:"+ dr["imgtitle"].ToString();
   foreach(byte a in mydata)
   {
    myStream.WriteByte(a);
   }
  myStream.Close();
  Image myImage=Image.FromFile("temp") ;
  pic1.Image=myImage;
  pic1.Refresh();
  dr.Close ();

 }
 else
 {
  MessageBox.Show("没有成功读入数据!") ;
 
 }

 conn.Close();

}

}
}

转载于:https://www.cnblogs.com/eagames/archive/2005/11/16/277886.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值