使用.NET从SQL服务器保存和读取图片
2008-04-16 09:56
295 查看
用SQL Server来保存图片的程序
介绍:
这片文章是关于使用.NET从SQL服务器保存和读取图片。
使用工具:
SQL Server 2000
Microsoft .NET Version 1.1
C# (Windows Forms based application)
保存图片:
在一个SQL Server 2000 数据库中建立一个表至少要有一个IMAGE类型的字段。
这里用到的SQL语句如下:
CREATE TABLE [dbo].[tblImgData] (
[ID] [int] NOT NULL ,
[Name] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Picture] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
实际上IMAGE字段只是保存了包含二进制数据参数的字段,所以我们必须将图片转化成字节型。
string strFn=this.openFileDialog1.FileName;
通过使用FileInfo类,我获得了文件的大小:FileInfo fiImage=new FileInfo(strFn);
声明一个相应大小的数组:
this.m_lImageFileLength=fiImage.Length;
m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];
通过FileStream对象,我填充该数组:
FileStream fs=new FileStream(strFn,FileMode.Open,
FileAccess.Read,FileShare.Read);
int iBytesRead=fs.Read(m_barrImg,0,
Convert.ToInt32(this.m_lImageFileLength));
fs.Close();
完成调用图片代码:
protected void LoadImage()
{
try
{
this.openFileDialog1.ShowDialog(this);
string strFn=this.openFileDialog1.FileName;
this.pictureBox1.Image=Image.FromFile(strFn);
FileInfo fiImage=new FileInfo(strFn);
this.m_lImageFileLength=fiImage.Length;
FileStream fs=new FileStream(strFn,FileMode.Open,
FileAccess.Read,FileShare.Read);
m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];
int iBytesRead = fs.Read(m_barrImg,0,
Convert.ToInt32(this.m_lImageFileLength));
fs.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
保存字节数组数据到数据库。
Create command text to insert record. this.sqlCommand1.CommandText=
"INSERT INTO tblImgData(ID,Name,Picture)" +
" values(@ID,@Name,@Picture)";
Create parameters. this.sqlCommand1.Parameters.Add("@ID",
System.Data.SqlDbType.Int, 4);
this.sqlCommand1.Parameters.Add("@Name",
System.Data.SqlDbType.VarChar, 50);
this.sqlCommand1.Parameters.Add("@Picture",
System.Data.SqlDbType.Image);
注意 “@Picture” 有 “SqlDbType.Image”因为它是IMAGE类型的字段。
提供参数值:
this.sqlCommand1.Parameters["@ID"].Value=this.editID.Text;
this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text;
this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg;
“this.m_barrImg”是一个字节数组,刚才我们已经填充过了。
现在执行SQL用来保存记录到数据库中:
int iresult=this.sqlCommand1.ExecuteNonQuery();
完成保存图片代码:
Collapseprivate void btnSave_Click(object sender, System.EventArgs e)
{
try
{
this.sqlConnection1.Open();
if (sqlCommand1.Parameters.Count ==0 )
{
this.sqlCommand1.CommandText="INSERT INTO tblImgData(ID," +
" Name,Picture) values(@ID,@Name,@Picture)";
this.sqlCommand1.Parameters.Add("@ID",
System.Data.SqlDbType.Int,4);
this.sqlCommand1.Parameters.Add("@Name",
System.Data.SqlDbType.VarChar,50);
this.sqlCommand1.Parameters.Add("@Picture",
System.Data.SqlDbType.Image);
}
this.sqlCommand1.Parameters["@ID"].Value=this.editID.Text;
this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text;
this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg;
int iresult=this.sqlCommand1.ExecuteNonQuery();
MessageBox.Show(Convert.ToString(iresult));
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
this.sqlConnection1.Close();
}
}
读取图片:
从数据库读取图片是保存图片的精确的反向操作。
首先建立文本指令用来读取记录。
SqlCommand cmdSelect = new SqlCommand("select Picture" +
" from tblImgData where ID=@ID",
this.sqlConnection1);
建立语句的参数:
cmdSelect.Parameters.Add("@ID",SqlDbType.Int,4);
提供参数的值
cmdSelect.Parameters["@ID"].Value=this.editID.Text;
打开数据库连接并执行“ExecuteScalar”,因为我们只需要“IMAGE”字段下的返回数据。
byte[] barrImg=(byte[])cmdSelect.ExecuteScalar();
通过分阶段的运行指令返回“Object”类型的数据,我们将其转换为字节数组。
保存数据到临时文件中:
string strfn=Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs=new FileStream(strfn,FileMode.CreateNew,FileAccess.Write);
fs.Write(barrImg,0,barrImg.Length);
fs.Flush();
fs.Close();
然后在你要显示的地方显示图片:
pictureBox1.Image=Image.FromFile(strfn);
完成图片的读取代码:
private void btnLoad_Click(object sender, System.EventArgs e)
{
try
{
SqlCommand cmdSelect=new SqlCommand("select Picture" +
" from tblImgData where ID=@ID",this.sqlConnection1);
cmdSelect.Parameters.Add("@ID",SqlDbType.Int,4);
cmdSelect.Parameters["@ID"].Value=this.editID.Text;
this.sqlConnection1.Open();
byte[] barrImg=(byte[])cmdSelect.ExecuteScalar();
string strfn=Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs=new FileStream(strfn,
FileMode.CreateNew, FileAccess.Write);
fs.Write(barrImg,0,barrImg.Length);
fs.Flush();
fs.Close();
pictureBox1.Image=Image.FromFile(strfn);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
this.sqlConnection1.Close();
}
}
介绍:
这片文章是关于使用.NET从SQL服务器保存和读取图片。
使用工具:
SQL Server 2000
Microsoft .NET Version 1.1
C# (Windows Forms based application)
保存图片:
在一个SQL Server 2000 数据库中建立一个表至少要有一个IMAGE类型的字段。
这里用到的SQL语句如下:
CREATE TABLE [dbo].[tblImgData] (
[ID] [int] NOT NULL ,
[Name] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Picture] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
实际上IMAGE字段只是保存了包含二进制数据参数的字段,所以我们必须将图片转化成字节型。
string strFn=this.openFileDialog1.FileName;
通过使用FileInfo类,我获得了文件的大小:FileInfo fiImage=new FileInfo(strFn);
声明一个相应大小的数组:
this.m_lImageFileLength=fiImage.Length;
m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];
通过FileStream对象,我填充该数组:
FileStream fs=new FileStream(strFn,FileMode.Open,
FileAccess.Read,FileShare.Read);
int iBytesRead=fs.Read(m_barrImg,0,
Convert.ToInt32(this.m_lImageFileLength));
fs.Close();
完成调用图片代码:
protected void LoadImage()
{
try
{
this.openFileDialog1.ShowDialog(this);
string strFn=this.openFileDialog1.FileName;
this.pictureBox1.Image=Image.FromFile(strFn);
FileInfo fiImage=new FileInfo(strFn);
this.m_lImageFileLength=fiImage.Length;
FileStream fs=new FileStream(strFn,FileMode.Open,
FileAccess.Read,FileShare.Read);
m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];
int iBytesRead = fs.Read(m_barrImg,0,
Convert.ToInt32(this.m_lImageFileLength));
fs.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
保存字节数组数据到数据库。
Create command text to insert record. this.sqlCommand1.CommandText=
"INSERT INTO tblImgData(ID,Name,Picture)" +
" values(@ID,@Name,@Picture)";
Create parameters. this.sqlCommand1.Parameters.Add("@ID",
System.Data.SqlDbType.Int, 4);
this.sqlCommand1.Parameters.Add("@Name",
System.Data.SqlDbType.VarChar, 50);
this.sqlCommand1.Parameters.Add("@Picture",
System.Data.SqlDbType.Image);
注意 “@Picture” 有 “SqlDbType.Image”因为它是IMAGE类型的字段。
提供参数值:
this.sqlCommand1.Parameters["@ID"].Value=this.editID.Text;
this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text;
this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg;
“this.m_barrImg”是一个字节数组,刚才我们已经填充过了。
现在执行SQL用来保存记录到数据库中:
int iresult=this.sqlCommand1.ExecuteNonQuery();
完成保存图片代码:
Collapseprivate void btnSave_Click(object sender, System.EventArgs e)
{
try
{
this.sqlConnection1.Open();
if (sqlCommand1.Parameters.Count ==0 )
{
this.sqlCommand1.CommandText="INSERT INTO tblImgData(ID," +
" Name,Picture) values(@ID,@Name,@Picture)";
this.sqlCommand1.Parameters.Add("@ID",
System.Data.SqlDbType.Int,4);
this.sqlCommand1.Parameters.Add("@Name",
System.Data.SqlDbType.VarChar,50);
this.sqlCommand1.Parameters.Add("@Picture",
System.Data.SqlDbType.Image);
}
this.sqlCommand1.Parameters["@ID"].Value=this.editID.Text;
this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text;
this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg;
int iresult=this.sqlCommand1.ExecuteNonQuery();
MessageBox.Show(Convert.ToString(iresult));
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
this.sqlConnection1.Close();
}
}
读取图片:
从数据库读取图片是保存图片的精确的反向操作。
首先建立文本指令用来读取记录。
SqlCommand cmdSelect = new SqlCommand("select Picture" +
" from tblImgData where ID=@ID",
this.sqlConnection1);
建立语句的参数:
cmdSelect.Parameters.Add("@ID",SqlDbType.Int,4);
提供参数的值
cmdSelect.Parameters["@ID"].Value=this.editID.Text;
打开数据库连接并执行“ExecuteScalar”,因为我们只需要“IMAGE”字段下的返回数据。
byte[] barrImg=(byte[])cmdSelect.ExecuteScalar();
通过分阶段的运行指令返回“Object”类型的数据,我们将其转换为字节数组。
保存数据到临时文件中:
string strfn=Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs=new FileStream(strfn,FileMode.CreateNew,FileAccess.Write);
fs.Write(barrImg,0,barrImg.Length);
fs.Flush();
fs.Close();
然后在你要显示的地方显示图片:
pictureBox1.Image=Image.FromFile(strfn);
完成图片的读取代码:
private void btnLoad_Click(object sender, System.EventArgs e)
{
try
{
SqlCommand cmdSelect=new SqlCommand("select Picture" +
" from tblImgData where ID=@ID",this.sqlConnection1);
cmdSelect.Parameters.Add("@ID",SqlDbType.Int,4);
cmdSelect.Parameters["@ID"].Value=this.editID.Text;
this.sqlConnection1.Open();
byte[] barrImg=(byte[])cmdSelect.ExecuteScalar();
string strfn=Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs=new FileStream(strfn,
FileMode.CreateNew, FileAccess.Write);
fs.Write(barrImg,0,barrImg.Length);
fs.Flush();
fs.Close();
pictureBox1.Image=Image.FromFile(strfn);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
this.sqlConnection1.Close();
}
}
相关文章推荐
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Java从网络批量读取图片并保存至本网站服务器后再插入文章中
- Unity 场景保存,上传服务器,在下载更新场景 IO读取图片和WWW读取图片比较
- echarts 生成统计图时,自动保存图片到服务器,并使用freemarker生成word
- Java使用URL读取网络图片资源 并保存在本地
- JSP读取远程图片保存到linux服务器(oracle服务器)-不失真
- 在.net中使用GDI来提高gif图片的保存画质
- 使用Go语言+goproxy库编写的http代理服务器+图片cache保存脚本 第一版完成
- 使用.NET 反射机制(Reflecttion)读取和保存Xml配置文档
- 在.net中使用GDI+来提高gif图片的保存画质
- 在.net中使用GDI+来提高gif图片的保存画质
- Unity 从服务器下载图片保存本地然后下次读取
- vb.net 使用Access数据库 保存和读取图片文件
- 在.net中使用GDI+来提高gif图片的保存画质
- 【opencv 官方教程】翻译1 基本安装使用 编译工程 读取、显示、保存图片
- wp7用独立存储空间保存服务器图片和从独立存储空间读取图片
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 使用字节流、客户端读取图片发送至服务端保存
- .net 中读取Excel2007的方法(服务器不装office2007) for ExcelToSQL
- swift3.0图片保存到沙盒-从沙盒读取图片显示-从沙盒上传到服务器