wmf 等文件的数据库保存和读取

其中 new byte[sm.Length+8]为:

 +8是wmf文件

 +1是office07文件

 jpg文件不加.

上面的规律是通过二进制解读器比较发现的.至于原因还米搞清楚.

 

程序包括两个函数:保存函数和读取函数.

数据库是在本机上建立一个名为printtest的数据库,在数据库里建一个表imagetest:

    id   int类型  (是标识)

    imagetest image类型

 

 

 using System;
 
using System.Windows.Forms;
 
using System.Drawing;
 
using System.Data.SqlClient;
 
using System.Data;
 
using System.IO;
 
using System.Drawing.Imaging;
 
namespace wmftest
 
{
    
/**//// <summary>
    
/// wmftest 的摘要说明。
    
/// </summary>

    public class wmftest 
    
{
        
public wmftest()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
//private Point Corner_LeftTop;//定义左上角
        private static string sqlconnstr=
       
"Data Source=(local) ;Initial Catalog=printtest;Integrated Security=SSPI";
        
public static void InsertIMG()
        
{

            
//将需要存储的图片读取为数据流
            FileStream sm=new FileStream(@"E:\1.wmf", FileMode.Open,FileAccess.Read);
            Byte[] byte2 
= new byte[sm.Length+8];
            sm.Read(byte2 , 
0, Convert.ToInt32(sm.Length));            
            sm.Close();
            
            
using (SqlConnection conn = new SqlConnection(sqlconnstr))
            
{
                
try
                
{
                    
//数据库写入#region//数据库写入
                    conn.Open();
                    SqlCommand cmd 
= new SqlCommand();
                    cmd.Connection 
= conn;
                    cmd.CommandText 
= "insert into imagetest (imagetest) values (@par) ";
                    cmd.CommandType
=CommandType.Text;
                    cmd.Parameters.Add(
"@par",SqlDbType.Image);
                    cmd.Parameters[
"@par"].Value=byte2;
                    cmd.ExecuteNonQuery();
                    
#endregion
                }

                
catch(Exception ex){ MessageBox.Show(ex.Message);}
                conn.Close();
            }

        }

        
public static void Read(int id)
        
{
            
byte[] MyData = new byte[0];
            
using (SqlConnection conn = new SqlConnection(sqlconnstr))
            
{
                FileStream fs 
= new FileStream( @"c:\00.wmf", FileMode.Create, FileAccess.Write);
                
try
                
{
                    
//数据库读取#region//数据库读取
                    conn.Open();
                    SqlCommand cmd 
= new SqlCommand();
                    cmd.Connection 
= conn;
                    cmd.CommandText 
= "select imagetest from imagetest where id=@id";
                    cmd.CommandType
=CommandType.Text;
                    cmd.Parameters.Add(
"@id",SqlDbType.Int);//增加参数id,表示读取的是哪条记录
                    cmd.Parameters["@id"].Value=id;
                    SqlDataReader sdr 
= cmd.ExecuteReader();
                    sdr.Read();
                    
#endregion
                    
//数据流还原文件
                    MyData = (byte[])sdr["imagetest"];//读取第一个图片的位流
                    conn.Close();
                    
//获得数据库中存储的位流数组的维度上限,用作读取流的上限
                    int ArraySize= MyData.GetUpperBound(0);
                    fs.Write( MyData, 
0, ArraySize);
                }

                
catch(Exception ex){MessageBox.Show(ex.Message);}
                fs.Close();
//关闭
            }

        }

    }

}

posted @ 2008-08-14 17:24  -阿飞-  阅读(815)  评论(0编辑  收藏  举报