您的位置:首页 > 数据库

保存图象到Sql Server,并且读取显示

2006-12-18 15:24 323 查看
现有图象数据表

CREATE TABLE [ENTR_Image] (
[EIGuid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF__ENTR_Imag__EIGui__2C3F4C1F] DEFAULT (newid()),
[EImage] [image] NOT NULL CONSTRAINT [DF__ENTR_Imag__EImag__2D337058] DEFAULT (''),
[VImage] [image] NOT NULL CONSTRAINT [DF__ENTR_Imag__VImag__2E279491] DEFAULT (''),
[OperationTime] [datetime] NOT NULL CONSTRAINT [DF__ENTR_Imag__Opera__2F1BB8CA] DEFAULT (getdate()),
PRIMARY KEY CLUSTERED
(
[EIGuid]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

需要把指定的图片添加到数据库里面
打开图片到picturebox里面

private void button1_Click(object sender, System.EventArgs e)
private void button2_Click(object sender, System.EventArgs e)
private byte[] ImageToStream(string fileName)
{
Bitmap image = new Bitmap(fileName);
MemoryStream stream = new MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
return stream.ToArray();
}

保存byte[]到数据表

private void StoreImage(byte[] content,byte[] connect1)
{
// if (MainForm.conn.State.Equals(ConnectionState.Closed))
// MainForm.conn.Open();
string str_Conn="server=SERVER-DBT;database=LogERP;uid=logerp;pwd=logerpok;Max Pool Size=20000;";

try
{
SqlConnection sqlconn=new SqlConnection(str_Conn);
sqlconn.Open();

SqlCommand insert = new SqlCommand("Insert into ENTR_Image(EImage,VImage) values (@EImage,@VImage)");
insert.Connection=sqlconn;
SqlParameter imageParameter =
insert.Parameters.Add("@EImage", SqlDbType.Binary);
imageParameter.Value = content;
imageParameter.Size = content.Length;

SqlParameter imageParameter1 =
insert.Parameters.Add("@VImage", SqlDbType.Binary);
imageParameter1.Value = connect1;
imageParameter1.Size = connect1.Length;

int i=insert.ExecuteNonQuery();
sqlconn.Close();
MessageBox.Show(i.ToString());

}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
MessageBox.Show(ex.StackTrace.ToString ());
}
finally
{
// MainForm.conn.Close();
}
}

新增以后,根据guid查询图像

private string str_Guid;
public string str_ImageGuid
{
set
{
str_Guid=value;
}
}

private void ReadImage()
{
string str_Conn="server=172.17.100.132;database=Northwind;uid=sa;pwd=19791225;Max Pool Size=20000;";
try
{
//根据GUID读取图片
SqlConnection sqlconn=new SqlConnection(str_Conn);
sqlconn.Open();
string str_Sql="select EImage from ENTR_Image where EIGuid='"+str_Guid+"'";
SqlCommand cmd=new SqlCommand(str_Sql);
cmd.Connection=sqlconn;
byte [] content = (byte[] )cmd.ExecuteScalar();
try
{
MemoryStream stream = new MemoryStream(content);
pictureBox1.Image= Image.FromStream(stream);
}
catch
{

}

str_Sql="select VImage from ENTR_Image where EIGuid='"+str_Guid+"'";
cmd=new SqlCommand(str_Sql);
cmd.Connection=sqlconn;
content = (byte[] )cmd.ExecuteScalar();
try
{
MemoryStream stream = new MemoryStream(content);
pictureBox2.Image= Image.FromStream(stream);
}
catch
{
}
sqlconn.Close();

}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
MessageBox.Show(ex.StackTrace.ToString ());
}
}

byte[]的初始化

ClassEnt_rsDrawing.Browser=byt;

现在如果转换过来
把sql里面的image字段的内容读入文件
代码如下:

private void GetFileFromDataBase(byte[] byt,string str_Filename)

辅助代码,保存对话框

private string fun_savefilename()
public byte[] GetImage(string str_Guid)

public static byte[] GetByteImage(string str_Sql)
private void ImageLoad(byte[] byt_Image)
{
DevExpress.XtraEditors.PictureEdit pb = new DevExpress.XtraEditors.PictureEdit();
Form f= new Form();
f.Controls.Add(pb);
f.MinimizeBox = false;
f.MaximizeBox=false;
pb.Dock=DockStyle.Fill;
pb.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch ;
f.StartPosition = FormStartPosition.CenterScreen;
pb.Properties.PictureStoreMode = DevExpress.XtraEditors.Controls.PictureStoreMode.ByteArray;
pb.EditValue = byt_Image;
f.Show();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: