使用asp.net和C#如何存取Sql Server2000中的Image(16)类型的字段?

来源:互联网 发布:dnf优化2017 编辑:程序博客网 时间:2024/06/08 02:16

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.Data.SqlClient;
using System.IO;
using System.Configuration;

namespace UploadImageToSqlserver
{
 ///


 ///上传图片到数据库存储
 ///

 public class UploadImage : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Button Button1;
  protected System.Web.UI.WebControls.Label lblMessage;
  protected System.Web.UI.WebControls.TextBox txtDescription;
  protected System.Web.UI.HtmlControls.HtmlInputFile UP_File;
  protected System.Web.UI.WebControls.LinkButton LinkButton1;
  protected Int32 FileLength = 0;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  ///


  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  ///

  private void InitializeComponent()
  {   
   this.Button1.Click += new System.EventHandler(this.Button1_Click);
   this.LinkButton1.Click += new System.EventHandler(this.LinkButton1_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void Button1_Click(object sender, System.EventArgs e)
  {
   HttpPostedFile UpFile = UP_File.PostedFile;//HttpPostedFile对象,用于读取图象文件属性
   FileLength = UpFile.ContentLength;
   try
   {
    if(FileLength == 0)
    {
     lblMessage.Text = "请选择您要上传的文件";
    }
    else
    {
     Byte[] FileByteArray = new byte[FileLength]; //图象文件临时储存Byte数组
     Stream StreamObj = UpFile.InputStream;//建立数据流对像
     //读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
     StreamObj.Read(FileByteArray,0,FileLength);
     
     SqlConnection  Con  =  new  SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
     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();
     lblMessage.Text  =  "

OK!你已经成功上传你的图片";//提示上传成功

    }
   }
   catch(Exception ex)
   {
    lblMessage.Text = ex.Message.ToString();
   }

  }

  private void LinkButton1_Click(object sender, System.EventArgs e)
  {
   Response.Redirect("ViewImage.aspx");
  }
 }
}

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.Data.SqlClient;
using System.Configuration;
using System.IO;
using System.Drawing;

namespace UploadImageToSqlserver
{
 ///


 /// 从数据库中取出图片并显示在网页中。
 ///

 public class ViewImage : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DropDownList DdlImageId;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   //建立数据库链接
   if(!IsPostBack)
   {
    BindDropDownList();
   }
 
  }
  private void BindDropDownList()
  {
   SqlConnection  Con  =  new  SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
   String  SqlCmd  =  "SELECT  ImageID  FROM  ImageStore"; 
   SqlDataAdapter  CmdObj  =  new  SqlDataAdapter(SqlCmd,  Con);
   DataSet ds = new DataSet();
   CmdObj.Fill(ds,"ImageId");

   DdlImageId.DataSource = ds.Tables["ImageId"].DefaultView;
   DdlImageId.DataTextField = "ImageID";
   DdlImageId.DataValueField = "ImageID";

   
   DdlImageId.DataBind();
   DdlImageId.Items.Insert(0, "请选择");
   DdlImageId.SelectedIndex = 0;

   Con.Close();
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  ///


  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  ///

  private void InitializeComponent()
  {   
   this.DdlImageId.SelectedIndexChanged += new System.EventHandler(this.DdlImageId_SelectedIndexChanged);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  protected void DdlImageId_SelectedIndexChanged(object sender, System.EventArgs e)
  {
   int  ImgID  =  Convert.ToInt32(DdlImageId.SelectedValue);
   SqlConnection  Con  =  new  SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]); 
   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.BufferOutput = true; 
   Con.Close();

  
 

  }
 }
}

 

另外 “孟子E章”处理如下:

下面的代码实现从SQL Server数据库提取图片并显示在DataGrid的功能。下面的代码实现从SQL Server数据库提取图片并显示在DataGrid的功能。

DataGridShowImage.aspx

<%@ Page language="c#" debug="true" Codebehind="DataGridShowImage.aspx.cs" AutoEventWireup="false" Inherits="eMeng.Exam.DataGridShowImage.DataGridShowImage" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD> <title>从数据库中取得照片并显示在DataGrid中</title> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"></HEAD><body MS_POSITIONING="GridLayout"><form id="DataGridShowImage" method="post" runat="server"> <h3 align="center">从数据库中取得照片并显示在DataGrid中</h3> <Columns> <ItemTemplate> ' ID="Label1"/> </ItemTemplate> </asp:TemplateColumn> <ItemTemplate> ' ID="Label2"/> </ItemTemplate> </asp:TemplateColumn> <ItemTemplate> ' ID="Label3"/> </ItemTemplate> </asp:TemplateColumn> <ItemTemplate> ' ID="Label4"/> </ItemTemplate> </asp:TemplateColumn> <ItemTemplate> ' /> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid></form></body></HTML>??DataGridShowImage.aspx.csusing 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.Data.SqlClient;namespace eMeng.Exam.DataGridShowImage{ /// <summary> /// DataGridShowImage 的摘要说明。 /// </summary> public class DataGridShowImage : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid DG_Persons; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if(!this.IsPostBack) { BindGrid(); } } private void BindGrid() { string strCnn = "Data Source=.;Initial Catalog=mxh;User Id=sa;Password=;"; SqlConnection myConnection = new SqlConnection(strCnn); SqlCommand myCommand = new SqlCommand("SELECT * FROM Person", myConnection); myCommand.CommandType = CommandType.Text; try { myConnection.Open(); DG_Persons.DataSource = myCommand.ExecuteReader(CommandBehavior.CloseConnection); DG_Persons.DataBind(); } catch(SqlException SQLexc) { Response.Write("提取数据时出现错误:" + SQLexc.ToString()); } } protected string FormatURL(object strArgument) { return "ReadImage.aspx?id=" + strArgument.ToString(); }#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); }#endregion }}ReadImage.aspx?<%@ Page language="c#" Codebehind="ReadImage.aspx.cs" AutoEventWireup="false" Inherits="eMeng.Exam.DataGridShowImage.ReadImage" %>using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Data.SqlClient;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace eMeng.Exam.DataGridShowImage{ /// <summary> /// ReadImage 的摘要说明。 /// </summary> public class ReadImage : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 string strImageID = Request.QueryString["id"]; SqlConnection myConnection = new SqlConnection("Data Source=.;Initial Catalog=mxh;User Id=sa;Password=;"); SqlCommand myCommand = new SqlCommand("Select PersonImageType, PersonImage from Person Where PersonID=" + strImageID, myConnection); try { myConnection.Open(); SqlDataReader myDataReader; myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection); if(myDataReader.Read()) { Response.Clear(); Response.ContentType = myDataReader["PersonImageType"].ToString(); Response.BinaryWrite((byte[])myDataReader["PersonImage"]); } myConnection.Close(); } catch (SqlException SQLexc) { } Response.End(); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion }}

下面的代码实现向SQL Server数据库添加图片和文字的功能。

首先,在SQL查询分析器中执行下面的语句,以创建表和存储过程。

Drop Table PersonGoCreate Table Person(PersonID Int Identity,PersonEmail Varchar(255),PersonName Varchar(255),PersonSex Char(1),PersonDOB DateTime,PersonImage Image,PersonImageType Varchar(255))Drop Proc sp_person_ispGoCreate Proc sp_person_isp@PersonEmail Varchar(255),@PersonName Varchar(255),@PersonSex Char(1),@PersonDOB DateTime,@PersonImage Image,@PersonImageType Varchar(255)AsBegin Insert into Person (PersonEmail, PersonName, PersonSex, PersonDOB, PersonImage, PersonImageType) Values (@PersonEmail, @PersonName, @PersonSex, @PersonDOB, @PersonImage, @PersonImageType)EndGo<%@ Import Namespace="System.IO" %><%@ Import Namespace="System.Data.SqlClient" %><%@ Import Namespace="System.Data" %><%@ Page Language="vb" %><HTML><HEAD><title>向SQL Server插入图片</title></HEAD><body style="FONT: 9pt 宋体"> <form enctype="multipart/form-data" runat="server" ID="Form1"> </asp:TableCell> </asp:TableRow> </asp:TableCell> </asp:TableCell> </asp:TableRow> </asp:TableCell> </asp:TableCell> </asp:TableRow> </asp:TableCell> </asp:TableCell> </asp:TableRow> </asp:TableCell> </asp:TableCell> </asp:TableRow> </asp:TableCell> <input type="file" id="PersonImage" runat="server" NAME="PersonImage" /></asp:TableCell> </asp:TableRow> </asp:TableCell> </asp:TableRow> </asp:Table> </form></body></HTML>暂无C#版本!ReadImage.aspx.cs