技术开发 频道

SQL Server存取数据库图片

   SQL Server存取数据库图片(二)

  下面给大家一个用于C# Winform的存入、读取程序。其中不同请大家自己比较!(为了方便起见,我将数据库字段简化为二个: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(); } } }
0
相关文章