怎么把图片文件在SQL server数据库中保存为二进制记录?(注:不是用图片路径),最好有源代码。

 我来答
匿名用户
2013-06-29
展开全部
首先在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] 向数据库中存入图片:using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.SqlClient;namespace UpLoadFile
{
/// <summary>
/// Summary description for UpLoadImage.
/// </summary>
public class UpLoadImage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnUpload;
protected System.Web.UI.WebControls.Label txtMessage;
protected System.Web.UI.WebControls.TextBox txtDescription;
protected System.Web.UI.HtmlControls.HtmlTable Table1;
protected System.Web.UI.HtmlControls.HtmlInputFile UP_FILE;//HtmlControl、WebControls控件对象
protected Int32 FileLength = 0;

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
if(!Page.IsPostBack)
{
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void btnUpload_Click(object sender, System.EventArgs e)
{
HttpPostedFile UpFile = this.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("uid=sa;pwd= ;initial catalog=EE;data source=127.0.0.1;Connect Timeout=90");
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();
}

} }
}
将数据库中的图片数据读出来显示:using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.SqlClient;namespace UpLoadFile
{
/// <summary>
/// Summary description for ReadImage.
/// </summary>
public class ReadImage : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
if(!Page.IsPostBack)
{
string id = Request.QueryString["ImgID"]; //得到图片的ID if (id != ""&& id != null && id != string.Empty)
{
ShowImage( id);
}
}
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion public void ShowImage(string id)
{
int ImgID = Convert.ToInt32(id); //ImgID为图片ID
//建立数据库链接
SqlConnection Con = new SqlConnection("uid=sa;pwd= ;initial catalog=EE;data source=127.0.0.1;Connect Timeout=90");
String SqlCmd = "SELECT * FROM ImageStore WHERE ImageID = @ImageID";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@ImageID", SqlDbType.Int).Value = ImgID;
try
{
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();
}
catch
{
Response.Write("<script>alert('该图片不存在');</script>");
return;
} }
}
}
匿名用户
2013-06-29
展开全部
使用blob类型,就是大型二进制,通常都有函数将图片转化而二进制存地。这个类型支持最大4G地内容,存取方便,不受限制。binary没去计算过这种类型是可伸缩地么? 类似nvarchar类型? 还是不管存多大地东西 都是那么大地 类似nchar? BLOB是十分宏大地不定地二进制或许字符型数据,通常是文档(.txt、.doc)和图片(.jpeg、.gif、.bmp),它能够存储在数据库中。在SQL Server中,BLOB能够是text、ntext或许image数据类型。 Image数据类型存储地是长度不肯定地二进制数据,最大长度是2GB。
BLOB数据在SQL Server系统中地存储方式不同于通常地数据类型,对于通常类型地数据系统直接在用户定义地字段上存储数据值,而对于BLOB类型数据,系统开拓新地存储页面来寄存这些数据,表中BLOB类型数据字段寄存地仅是一个16个字节地指针,该指针指向寄存该条记录地BLOB数据地页面。
1.2 BLOB地设计战略
BLOB数据是数据量很大地数据类型,它会占用大量地硬盘空间、内存和网络资源,因而合理地设计包含有BLOB数据类型地属性表,对提高存储效率、查询速度有很大地影响。通常BLOB地设计原则如下:
(1) 使用BLOB数据类型还是使用varchar或许varbinary数据类型
二进制大对象并不肯定要存储为text、ntext或许image数据类型,它们也能够作为varchar或许varbinary数据类型村处在表格中。数据类型地选择要依据将要存储地BLOB地实际大小。假如数据不会超过8K,那么就使用Varchar或许varbinary数据类型。假如这些大对象地尺寸超过8K,那么就使用text、ntext或许image数据类型。
(2) 存储BLOB在数据库中或许在文件系统中
常见地设计情况是将图片存在数据库中还是存在文件系统中。在大多数状况下,最佳把图片文件与其它数据一同存在数据库中。因为将影象数据文件存储在数据库中有许多长处:
易于管理 当BLOB与其她数据一同存储在数据库中时,BLOB和表格是数据一同备份和复原。这样就降低啦表格数据与BLOB数据不同步地机会,而且降低啦其她用户无意中删除啦文件系统中BLOB数据位置地路径和风险。另外,将数据存储在数据库中BLOB和其她数据地插入、更新和删除都在同一个事务中完成。这样就确保啦数据地一致性和文件与数据库之间地一致性。还有一点益处是不需要为文件系统中地文件单独设置安全性。
可伸缩性 尽管文件系统被设计为能够处理大量不同大小地对象,但是文件系统不能对大量小文件进行优化。在这种状况下,数据库系统能够进行优化。
可用性 数据库具有比文件系统更多地可用性。数据库复制允许在分布式环境中复制、分配和潜在地修改数据。在主系统失效地状况下,日志转移提供啦保存数据库备用副本地方法。
当然,在某些状况下,将图片存储在文件系统中将是更好地选择:
(1)使用图片地应用程序需要数据流性能,例照实时地视频重现。
(2)象Microsoft PhotoDraw或许Adobe Photoshop这样地应用程序常常拜访BLOB,这些应用程序只知道如何拜访文件。
(3)需要使用一些NTFS文件系统中地特别功用,例如远程存储。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式