首先在Access中建立一个表结构为:
表名:img
字段名 字段类型 说明
ID 自动编号 系统分配ID值
Imgtype 文本 上传文件类型
imgdata OLE对象 上传文件数据
aspx 页面主要代码
< form id ="form1" runat ="server" >
< div >
< asp:FileUpload ID ="FileUpload1" runat ="server" Width ="345px" />
< asp:Button ID ="Button1" runat ="server"
Text ="上传到数据库" onclick ="Button1_Click" />
< asp:Button ID ="Button2" runat ="server" Text ="读取数据库到文件"
onclick ="Button2_Click" />< asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
</ div >
</ form >
< form id ="form1" runat ="server" >
< div >
< asp:FileUpload ID ="FileUpload1" runat ="server" Width ="345px" />
< asp:Button ID ="Button1" runat ="server"
Text ="上传到数据库" onclick ="Button1_Click" />
< asp:Button ID ="Button2" runat ="server" Text ="读取数据库到文件"
onclick ="Button2_Click" />< asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
</ div >
</ form >
Cs文件代码
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection( " Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=admin;Data Source=D:\\WEB\\MyVs2008\\MyVs2008\\App_Data\\supervod.mdb " );
protected void Button1_Click( object sender, EventArgs e)
{
if ( ! IsValid) return ;
if (FileUpload1.PostedFile.FileName != "" )
{
int datalength = this .FileUpload1.PostedFile.ContentLength; // 获取上传文件大小
byte [] databuffer = new byte [datalength]; // 建立文件字节数组,缓存空间
System.IO.Stream objstream = this .FileUpload1.PostedFile.InputStream;
objstream.Read(databuffer, 0 , datalength);
string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = " insert into img(imgtype,imgdata) values(@imgtype,@imgdata) " ;
cmd.Parameters.Add( new System.Data.OleDb.OleDbParameter( " @imgtype " , System.Data.OleDb.OleDbType.VarChar)).Value = ext;
cmd.Parameters.Add( new System.Data.OleDb.OleDbParameter( " @imgdata " , System.Data.OleDb.OleDbType.Binary)).Value = databuffer;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
protected void Button2_Click( object sender, EventArgs e)
{
System.Data.OleDb.OleDbDataReader dr = null ;
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
byte [] FileData = null ;
string type = "" ;
cmd.CommandText = " select imgdata,imgtype from img where id=@ID " ;
cmd.Parameters.Add( new System.Data.OleDb.OleDbParameter( " @ID " , System.Data.OleDb.OleDbType.Integer)).Value = TextBox1.Text.Trim();
cmd.Connection = conn;
conn.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
FileData = ( byte [])dr[ " imgdata " ];
type = dr[ " imgtype " ].ToString();
}
dr.Close();
conn.Close();
System.IO.FileStream fs = new System.IO.FileStream( " d:\\aaa " + type, System.IO.FileMode.Create);
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
bw.Write(FileData, 0 , FileData.Length);
bw.Close();
}
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection( " Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=admin;Data Source=D:\\WEB\\MyVs2008\\MyVs2008\\App_Data\\supervod.mdb " );
protected void Button1_Click( object sender, EventArgs e)
{
if ( ! IsValid) return ;
if (FileUpload1.PostedFile.FileName != "" )
{
int datalength = this .FileUpload1.PostedFile.ContentLength; // 获取上传文件大小
byte [] databuffer = new byte [datalength]; // 建立文件字节数组,缓存空间
System.IO.Stream objstream = this .FileUpload1.PostedFile.InputStream;
objstream.Read(databuffer, 0 , datalength);
string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = " insert into img(imgtype,imgdata) values(@imgtype,@imgdata) " ;
cmd.Parameters.Add( new System.Data.OleDb.OleDbParameter( " @imgtype " , System.Data.OleDb.OleDbType.VarChar)).Value = ext;
cmd.Parameters.Add( new System.Data.OleDb.OleDbParameter( " @imgdata " , System.Data.OleDb.OleDbType.Binary)).Value = databuffer;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
protected void Button2_Click( object sender, EventArgs e)
{
System.Data.OleDb.OleDbDataReader dr = null ;
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
byte [] FileData = null ;
string type = "" ;
cmd.CommandText = " select imgdata,imgtype from img where id=@ID " ;
cmd.Parameters.Add( new System.Data.OleDb.OleDbParameter( " @ID " , System.Data.OleDb.OleDbType.Integer)).Value = TextBox1.Text.Trim();
cmd.Connection = conn;
conn.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
FileData = ( byte [])dr[ " imgdata " ];
type = dr[ " imgtype " ].ToString();
}
dr.Close();
conn.Close();
System.IO.FileStream fs = new System.IO.FileStream( " d:\\aaa " + type, System.IO.FileMode.Create);
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
bw.Write(FileData, 0 , FileData.Length);
bw.Close();
}
代码很简单,这里只做了一个演示,保存文件名为固定名称,其实可以在数据库里加入一个文件名了字段,这样就可以解决