急!请教大侠:如何把图片存入数据库SQL Server 2000里...

Happy315 2003-07-29 02:48:17
以前都是把图片路径保存在数据库里,再从文件里调用图片。但这样比较麻烦,
我想把图片直接存入数据库里,却不知如何保存???
谢谢!
...全文
264 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
520NET 2004-02-02
  • 打赏
  • 举报
回复
/*
首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageContentType Column为图象文件类型记录字段,ImageDescription Column为储蓄图象文件说明字段,ImageSize Column为储存图象文件长度字段,结构如下:
CREATE TABLE [dbo].[ImageStore] (
[ImageID] [int] IDENTITY (1, 1) NOT NULL ,
[ImageData] [image] NULL ,
[ImageContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ImageDescription] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[ImageSize] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
*/

//UpLoadImage.aspx程序内容如下:
<%@ Page Inherits="UploadImage.UploadImage" SRC="UpLoadImage.cs" Language="C#"%>
<HTML><title>上传图片</title>
<BODY bgcolor="#FFFFFF">
<FORM ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1">
<TABLE RUNAT="server" WIDTH="700" ALIGN="left" ID="Table1" cellpadding="0" cellspacing="0" border="0">
<TR>
<TD>上传图片(选择你要上传的图片)</TD>
<TD>
<INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE">
</TD>
</TR>
<TR>
<TD>
文件说明(添加上传图片说明,如:作者、出处)
</TD>
<TD>
<asp:TextBox RUNAT="server" WIDTH="239" ID="txtDescription" MAINTAINSTATE="false" />
</TD>
</TR>
<TR>
<TD>
<asp:Label RUNAT="server" ID="txtMessage" FORECOLOR="red" MAINTAINSTATE="false" />
</TD>
<TD>
<asp:Button RUNAT="server" WIDTH="239" ONCLICK="Button_Submit" TEXT="Upload Image" />
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
//-------------------------------------------------------------------
//UpLoadImage.cs程序内容如下:
using System;
using System.Web;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace UploadImage
{
public class UploadImage : Page {
protected HtmlInputFile UP_FILE; //HtmlControl、WebControls控件对象
protected TextBox txtDescription;
protected Label txtMessage;
protected Int32 FileLength = 0; //记录文件长度变量
protected void Button_Submit(System.Object sender, System.EventArgs e) {
HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性
FileLength = UpFile.ContentLength; //记录文件长度
try {
if (FileLength == 0) { //文件长度为零时
txtMessage.Text = "<b>请你选择你要上传的文件</b>";
} else {
Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
Stream StreamObject = UpFile.InputStream; //建立数据流对像
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray,0,FileLength);
//建立SQL Server链接
SqlConnection Con = new SqlConnection("Data Source=Localhost;Initial Catalog=testdb;User ID=sa;Pwd=;");
String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;
CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar,50).Value = UpFile.ContentType; //记录文件类型
//把其它单表数据记录上传
CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = txtDescription.Text;
//记录文件长度,读取时使用
CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = UpFile.ContentLength;
Con.Open();
CmdObj.ExecuteNonQuery();
Con.Close();
txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功
}
} catch (Exception ex) {
txtMessage.Text = ex.Message.ToString();
}}}}
//ReadImage.aspx程序内容如下:
/-----------------------------------------------------------------------
<%@ Page Inherits="ReadImage.MainDisplay" SRC="ReadImage.cs"%>
//----------------------------------------------------------------------
//ReadImage.cs程序内容如下:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ReadImage {
public class MainDisplay : System.Web.UI.Page {
public void Page_Load(System.Object sender, System.EventArgs e) {
int ImgID = Convert.ToInt32(Request.QueryString["ImgID"]); //ImgID为图片ID
//建立数据库链接
SqlConnection Con = new SqlConnection("Data Source=KING;Initial Catalog=testdb;User ID=sa;Pwd=;");
String SqlCmd = "SELECT * FROM ImageStore WHERE ImageID = @ImageID";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@ImageID", SqlDbType.Int).Value = ImgID;
Con.Open();
SqlDataReader SqlReader = CmdObj.ExecuteReader();
SqlReader.Read();
Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型
//输出图象文件二进制数制
Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);
Response.End();
Con.Close();
}
}
}
SeeSunSet 2004-02-01
  • 打赏
  • 举报
回复
<img src="imgview.aspx?id=6">

在imgview.aspx里:
sub page_load()
ad.selectcommand=new sqlcommand("select imgdata from imgdatatable where id=request("id"),conn)
ad.fill(dt)
response.Binarywrite dt.rows(0).item("imgdata")
end sub


lyhold 2004-01-31
  • 打赏
  • 举报
回复
mark!
Happy315 2003-07-29
  • 打赏
  • 举报
回复
感谢,
我要再如何在Img控件里显示这个保存的图片??
fmj1980 2003-07-29
  • 打赏
  • 举报
回复
/// <summary>
/// 添加图片到指定的数据表
/// </summary>
/// <param name="PostFile">上传图片的流</param>
/// <param name="TableName">数据表名称</param>
/// <param name="PicField">图片字段名称</param>
/// <param name="PicTypeFiled">图片类型字段名称</param>
/// <param name="PicSizeField">图片大小字段名称</param>
/// <param name="AddCondition">上传此图片的SQL条件(IE:UserID=1)</param>
public void AddPicture(System.Web.HttpPostedFile PostFile,string TableName,string PicField,string PicTypeFiled,string PicSizeField,string AddCondition)
{
if(PostFile==null)
throw new myException("上传文件的流不能够为空!");
//文件类型
string FileType=PostFile.ContentType;
//文件大小
Int32 FileLength=PostFile.ContentLength;
//图象文件临时储存Byte数组
Byte[] FileByteArray = new Byte[FileLength];
//建立数据流对像
Stream StreamObject = PostFile.InputStream;
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray,0,FileLength);
System.Web.HttpContext.Current.Response.End();

//生SQL语句
string strSQL=" Update " + TableName + " set " + PicField + "=@Image,"+ PicTypeFiled + "=@ContentType," + PicSizeField + "=@ImageSize where 1=1 And " + AddCondition;
//判断是否为SQLServer数据库
if (isSQLDataBase)
{
//此处为SQLServer数据库的处理
SqlConnection ObjConn=new SqlConnection(Connectionstring);
ObjConn.Open();
SqlCommand ObjComm=new SqlCommand(strSQL,ObjConn);
//添加参数
ObjComm.Parameters.Add("@Image",System.Data.SqlDbType.Binary,FileLength).Value = FileByteArray;
ObjComm.Parameters.Add("@ContentType",SqlDbType.VarChar,20).Value = FileType;
ObjComm.Parameters.Add("@ImageSize", SqlDbType.Decimal,9).Value = FileLength;
ObjComm.ExecuteNonQuery();
ObjConn.Close();
}
else
{
//此处为其他数据的处理,如Oracle
OleDbConnection ObjConn=new OleDbConnection(Connectionstring);
ObjConn.Open();
OleDbCommand ObjComm=new OleDbCommand(strSQL,ObjConn);
ObjComm.Parameters.Add("@Image",System.Data.OleDb.OleDbType.Binary,FileLength).Value = FileByteArray;
ObjComm.Parameters.Add("@ContentType",System.Data.OleDb.OleDbType.VarChar,20).Value = FileType; //记录文件类型
ObjComm.Parameters.Add("@ImageSize",System.Data.OleDb.OleDbType.Numeric,9).Value = FileLength;
ObjComm.ExecuteNonQuery();
ObjConn.Close();
}
}
junmingl 2003-07-29
  • 打赏
  • 举报
回复
用二进制流模式!
li_new 2003-07-29
  • 打赏
  • 举报
回复
到文档里搜索一下,www.csdn.net/develop
anytom 2003-07-29
  • 打赏
  • 举报
回复
我想应该可以

那位大虾

会就说出来吗????????????????????????
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2003-07-29 02:48
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。