其中 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
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//**//**//// <summary>
/// wmftest 的摘要说明。
/// </summary>
public class wmftest
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
public wmftest()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//private Point Corner_LeftTop;//定义左上角
private static string sqlconnstr=
"Data Source=(local) ;Initial Catalog=printtest;Integrated Security=SSPI";
public static void InsertIMG()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//将需要存储的图片读取为数据流
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))
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
try
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//数据库写入#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
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch(Exception ex)
{ MessageBox.Show(ex.Message);}
conn.Close();
}
}
public static void Read(int id)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
byte[] MyData = new byte[0];
using (SqlConnection conn = new SqlConnection(sqlconnstr))
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
FileStream fs = new FileStream( @"c:\00.wmf", FileMode.Create, FileAccess.Write);
try
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//数据库读取#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);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch(Exception ex)
{MessageBox.Show(ex.Message);}
fs.Close();//关闭
}
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)