昨天整理资料的时候正好看到一个例子,算你走狗屎运!在SQL Server中保存和输出图片
建表       为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数据库),下面是它的结构:      Column Name 
   Datatype 
   Purpose 
   ID 
   Integer 
   identity column Primary key 
   IMGTITLE 
   Varchar(50) 
   Stores some user friendly title to identity the image 
   IMGTYPE 
   Varchar(50) 
   Stores image content type. This will be same as recognized content types of ASP.NET 
   IMGDATA 
   Image 
   Stores actual image or binary data.    保存images进SQL Server数据库      为了保存图片到table你首先得从客户端上传它们到你的web服务器。你可以创建一个web form,用TextBox得到图片的标题,用HTML File Server Control得到图片文件。确信你设定了Form的encType属性为multipart/form-data。      Stream imgdatastream = File1.PostedFile.InputStream; 
   int imgdatalen = File1.PostedFile.ContentLength; 
   string imgtype = File1.PostedFile.ContentType; 
   string imgtitle = TextBox1.Text; 
   byte[] imgdata = new byte[imgdatalen]; 
   int n = imgdatastream.Read(imgdata,0,imgdatalen); 
   string connstr= 
   ((NameValueCollection)Context.GetConfig 
   ("appSettings"))["connstr"]; 
   SqlConnection connection = new SqlConnection(connstr); 
   SqlCommand command = new SqlCommand 
   ("INSERT INTO ImageStore(imgtitle,imgtype,imgdata) 
   VALUES ( @imgtitle, @imgtype,@imgdata )", connection ); 
   SqlParameter paramTitle = new SqlParameter 
   ("@imgtitle", SqlDbType.VarChar,50 ); 
   paramTitle.Value = imgtitle; 
   command.Parameters.Add( paramTitle); 
   SqlParameter paramData = new SqlParameter 
   ( "@imgdata", SqlDbType.Image ); 
   paramData.Value = imgdata; 
   command.Parameters.Add( paramData ); 
   SqlParameter paramType = new SqlParameter 
   ( "@imgtype", SqlDbType.VarChar,50 ); 
   paramType.Value = imgtype; 
   command.Parameters.Add( paramType ); 
   connection.Open(); 
   int numRowsAffected = command.ExecuteNonQuery(); 
   connection.Close();       从数据库中输出图片       现在让我们从数据库中取出我们刚刚保存的图片,在这儿,我们将直接将图片输出至浏览器。你也可以将它保存为一个文件或做任何你想做的。      private void Page_Load(object sender, System.EventArgs e) 
   { 
   string imgid =Request.QueryString["imgid"]; 
   string connstr=((NameValueCollection) 
   Context.GetConfig("appSettings"))["connstr"]; 
   string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = " 
   + imgid; 
   SqlConnection connection = new SqlConnection(connstr); 
   SqlCommand command = new SqlCommand(sql, connection); 
   connection.Open(); 
   SqlDataReader dr = command.ExecuteReader(); 
   if(dr.Read()) 
   { 
   Response.ContentType = dr["imgtype"].ToString(); 
   Response.BinaryWrite( (byte[]) dr["imgdata"] ); 
   } 
   connection.Close(); 
   }       在上面的代码中我们使用了一个已经打开的数据库,通过datareader选择images。接着用Response.BinaryWrite代替Response.Write来显示image文件。

解决方案 »

  1.   

    再来一个
    ASP.NET如何存取SQL Server数据库图片SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在SQL Server中存储和读取图片。  1、建立一个表:  在SQL SERVER中建立这样结构的一个表:
    列名         类型          目的  
     ID         Integer       主键ID  
    IMGTITLE   Varchar(50)  图片的标题  
    IMGTYPE    Varchar(50)  图片类型. ASP.NET要以辨认的类型 
    IMGDATA      Image      用于存储二进制数据    2、存储图片到SQL SERVER数据库中  为了能存储到表中,你首先要上传它们到你的WEB 服务器上,你可以开发一个web form,它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来。将你的 encType 属性设置为:myltipart/formdata. 
     
     Stream imgdatastream = File1.PostedFile.InputStream;
    int imgdatalen = File1.PostedFile.ContentLength;
    string imgtype = File1.PostedFile.ContentType;
    string imgtitle = TextBox1.Text;
    byte[] imgdata = new byte[imgdatalen];
    int n = imgdatastream.Read(imgdata,0,imgdatalen);
    string connstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"];SqlConnection connection = new SqlConnection(connstr);SqlCommand command = new SqlCommand
             ("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)
             VALUES ( @imgtitle, @imgtype,@imgdata )", connection );SqlParameter paramTitle = new SqlParameter
             ("@imgtitle", SqlDbType.VarChar,50 );paramTitle.Value = imgtitle;
    command.Parameters.Add( paramTitle);SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );
    paramData.Value = imgdata;
    command.Parameters.Add( paramData );SqlParameter paramType = new SqlParameter( "@imgtype", SqlDbType.VarChar,50 );
    paramType.Value = imgtype;
    command.Parameters.Add( paramType );connection.Open();
    int numRowsAffected = command.ExecuteNonQuery();
    connection.Close(); 
      

  2.   

    3、从数据库中恢复读取  现在让我们来从SQL Server中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。 
     
     private void Page_Load(object sender, System.EventArgs e)
    {
     string imgid =Request.QueryString["imgid"];
     string connstr=((NameValueCollection)
     Context.GetConfig("appSettings"))["connstr"];
     string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = " + imgid;
     SqlConnection connection = new SqlConnection(connstr);
     SqlCommand command = new SqlCommand(sql, connection);
     connection.Open();
     SqlDataReader dr = command.ExecuteReader();
     if(dr.Read())
     {
      Response.ContentType = dr["imgtype"].ToString();
      Response.BinaryWrite( (byte[]) dr["imgdata"] );
     }
     connection.Close();
    }   要注意的是Response.BinaryWrite 而不是Response.Write.  下面给大家一个用于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();}}
    }
     
      

  3.   

    能否用java给一个范例啊?
    谢谢拉
      

  4.   

    大家帮帮忙啊!:)
    我以前在oracle中是这样写的sql:
    byte buffer[] = null;
    java.io.FileInputStream fin1 = null;
    ResultSet ors = null;
    java.sql.Statement ostmt = null;String uploadSQL ="insert into dbo.test values('" + accessory_savename +"',EMPTY_BLOB())";
    String selectSQL = "select * from dbo.test where id=" + id +" for update";File filein1 = new File(path + File.separator + accessory.toString());
        try {      fin1 = new FileInputStream(filein1);
          con.setAutoCommit(false);
          ostmt = (OracleResultSet) con.createStatement();
          ostmt.execute(uploadSQL);
          ors = (OracleResultSet) ostmt.executeQuery(selectSQL);
          while (ors.next()) {
            oracle.sql.BLOB blob1 = (BLOB) ors.getBlob(11);
            buffer = new byte[6144];
            OutputStream fout1 = blob1.getBinaryOutputStream();
            while (fin1.read(buffer) != -1) {
              fout1.write(buffer);
            }
            fin1.close();
            fout1.flush();
            fout1.close();      }
          con.commit();
        }
        catch (FileNotFoundException ex) {
          ex.printStackTrace();
        }
        catch (SQLException ex1) {
          ex1.printStackTrace();
        }
        catch (Exception ex2) {
          ex2.printStackTrace();
        }
        finally {
          ors.close();
          ostmt.close();
        }
      }
      

  5.   

    我也想要一个sqlserver的图片存取的列子,有的朋友发一下
      

  6.   

    大家帮我看一下吧,我是这样写的:    java.io.FileInputStream fin1 = null;
        byte buffer[] = new byte[];
        File filein1 = new File(path + File.separator + accessory.toString());    fin1 = new FileInputStream(filein1);
        fin1.read(buffer,0,6144);    java.sql.Statement statement = null;
           String sql = "";       try {
             sql = "insert into dbo.Archives_List_Manage(Serial_Num,Memo,Accessory) values(';
             sql = sql + serial_Num + ",'";
             sql = sql + memo + "',";
             sql = sql + buffer + ")";
             statement = con.createStatement();
             statement.executeUpdate(sql);       }
           catch (Exception e) {
             e.printStackTrace();
           }       finally {
             statement.close();
           }这样写说sql语句有错啊
      

  7.   

    好事做到底吧
    import java.sql.*;
    import javax.sql.*;
    import java.io.*;
    import oracle.jdbc.driver.OracleResultSet;
    import oracle.sql.BLOB;//oracle提供的表示二进制数据的类
    public class BlobBean
    {   Connection conn ;
       /**
        *构造方法,创建Connection对象,并且在数据库中添加一个表。
        */
       public BlobBean()throws Exception
       {
       
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
           conn = DriverManager.getConnection("jdbc:oracle:thin:[email protected]:1521:hellking", "system", "manager");
          // conn.createStatement().execute("create table  blobtable(blobvalue blob)");
        }
        
        /**
         *写入Blob数据到数据库
         */
    public void addBlob(String fileName)throws Exception
    {
            
            conn.setAutoCommit(false);
                Statement stmt = conn.createStatement();
                stmt.execute("insert into blobtable values (empty_blob())");
                ResultSet rset = stmt.executeQuery("SELECT blobvalue FROM blobtable FOR UPDATE");
                BLOB blob = null;
                while (rset.next()) {
                    blob = ((OracleResultSet) rset).getBLOB(1);
                    System.out.println(blob.length());
                }
                File binaryFile = new File(fileName);
                System.out.println(fileName+"'s length = " + binaryFile.length());
                FileInputStream instream = new FileInputStream(binaryFile);
                OutputStream outstream = blob.getBinaryOutputStream();
                int chunk = blob.getChunkSize();
                System.out.println("chunk size = " + chunk);
                byte[] buffer = new byte[chunk];
                int length = -1;
                while ((length = instream.read(buffer)) != -1)
                    outstream.write(buffer, 0, length);
                instream.close();
                outstream.close();
                conn.commit();        }
            
            /**
             *从数据库读取blob数据,并且保存在文件系统。
             */
         public void readBlob(String fileName)throws Exception
      {
            
            conn.setAutoCommit(false);
                Statement stmt = conn.createStatement();
                ResultSet rset = stmt.executeQuery("SELECT blobvalue FROM blobtable");
                BLOB blob = null;
                while (rset.next()) {
                    blob = ((OracleResultSet) rset).getBLOB(1);
                    System.out.println(blob.length());
                }            FileOutputStream file_out = new FileOutputStream(new File(fileName));
                InputStream blob_in = blob.getBinaryStream();
                int temp;
                while((temp=blob_in.read())!=-1)
                file_out.write(temp);//读取数据、写入文件系统
               
                file_out.close();
                blob_in.close();
                conn.commit();
            }        
             
    }