数据库名用ip试一下,blob用reader读写,看看reader关于binaray的方法

解决方案 »

  1.   

    我想用update去更改数据库中的内容,blob数据字段名为image,但是运行到
    oraclecommand.executereader()这行就出错了
      

  2.   

    数据库名换成短一点的
    blob类型好象要用添加parameter来更新
      

  3.   

    图像上传至数据库为了将图片存入数据库,我们有必要将数据库结构首先提出来,在保存图像的数据表中,我们针对图片,有一个专门的字段ImageDescription用来标明图像的相关信息,这样处理大量图像的时候就能通过这些简单的描述而区分它们;另外,ImageID字段用来作为图像唯一标示,Image字段用来存储图像信息;ContentType用来说明图像的ContentType类型;ByteSize用来保存图像的大小信息。下面是建表的SQL语句。
    CREATE TABLE [dbo].[Images] ([ImageID] [int] IDENTITY (1, 1) NOT NULL ,[Image] [image] NULL ,[ContentType] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,[ImageDescription] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,[ByteSize] [int] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    现在,我们来看数据图像上传的一个简单界面,在这里,用户选择一个图片,点击上传按钮就直接将图片保存到了数据库。
    <%@ Page Inherits="UploadSample.Main" SRC="Upload.cs"%><HTML><BODY><FORM  ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1"><h1>试验:<FONT COLOR="BLUE">System.Data.OleDb</FONT></h1><TABLE RUNAT="server" WIDTH="700" ALIGN="left" ID="Table1"><TR><TD><B>图像文件:</B></TD><TD><INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE"></TD></TR><TR><TD><b>文件描述:</b></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="上传" /></TD></TR></TABLE></FORM></BODY></HTML>
    在以上的代码中,我们需要注意,在页面表单部分,注意加入:ENCTYPE="multipart/form-data",这与一般的表单不同;另外,以下代码用来实现选择文件的输入框:<INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE">。在以上数据提交界面,我们并没有看到任何对于数据库的处理,这就是ASP.NET编程的好处之一,这里使用了Code Behind技术,就是将一些功能模块设计成为一个类,在这个类中实现需要的功能,我们可以看到,页面代码开头的代码:<%@ Page Inherits="UploadSample.Main" SRC="Upload.cs"%>就是继承了上传图像的类,所有我们上传图像需要的处理就在这里实现。该类的源文件如下:namespace UploadSample {
    public class Main : System.Web.UI.Page {
    protected System.Web.UI.HtmlControls.HtmlInputFile UP_FILE;protected System.Web.UI.WebControls.TextBox txtDescription;protected System.Web.UI.WebControls.Label txtMessage;protected System.Int32 FileLength = 0;
    protected void Button_Submit(System.Object sender, System.EventArgs e) {System.Web.HttpPostedFile UpFile = UP_FILE.PostedFile;FileLength = UpFile.ContentLength;
    try {
    if (FileLength == 0) {
    txtMessage.Text = "<b>*请选择上传的文件</b>";
    } else {
    System.Byte[] FileByteArray = new System.Byte[FileLength];System.IO.Stream StreamObject = UpFile.InputStream;StreamObject.Read(FileByteArray,0,FileLength);System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +"Integrated Security=SSPI;Initial Catalog=northwind");System.String SqlCmd = "INSERT INTO Images (Image, ContentType, ImageDescription, ByteSize) VALUES (?, ?, ?, ?)";System.Data.OleDb.OleDbCommand OleDbCmdObj = new System.Data.OleDb.OleDbCommand(SqlCmd, Con);OleDbCmdObj.Parameters.Add("@Image", System.Data.OleDb.OleDbType.Binary, FileLength).Value = FileByteArray;OleDbCmdObj.Parameters.Add("@ContentType", System.Data.OleDb.OleDbType.VarChar,50).Value = UpFile.ContentType;OleDbCmdObj.Parameters.Add("@ImageDescription", System.Data.OleDb.OleDbType.VarChar,100).Value = txtDescription.Text;OleDbCmdObj.Parameters.Add("@ByteSize", System.Data.OleDb.OleDbType.VarChar,100).Value = UpFile.ContentLength;Con.Open();OleDbCmdObj.ExecuteNonQuery();Con.Close();txtMessage.Text = "<p><b>* 图片上传成功!</b>";
    }
    } catch (System.Exception ex) {
    txtMessage.Text = ex.Message.ToString();
    }}}}
      

  4.   

    以上的代码比较简单,我们现在只来仔细研究数据上传到数据库的代码:System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +"Integrated Security=SSPI;Initial Catalog=northwind");System.String SqlCmd = "INSERT INTO Images (Image, ContentType, ImageDescription, ByteSize) VALUES (?, ?, ?, ?)";System.Data.OleDb.OleDbCommand OleDbCmdObj = new System.Data.OleDb.OleDbCommand(SqlCmd, Con);OleDbCmdObj.Parameters.Add("@Image", System.Data.OleDb.OleDbType.Binary, FileLength).Value = FileByteArray;OleDbCmdObj.Parameters.Add("@ContentType", System.Data.OleDb.OleDbType.VarChar,50).Value = UpFile.ContentType;OleDbCmdObj.Parameters.Add("@ImageDescription", System.Data.OleDb.OleDbType.VarChar,100).Value = txtDescription.Text;OleDbCmdObj.Parameters.Add("@ByteSize", System.Data.OleDb.OleDbType.VarChar,100).Value = UpFile.ContentLength;Con.Open();OleDbCmdObj.ExecuteNonQuery();Con.Close();
    以上代码中,首先建立了一个到SQL Server的数据库链接;然后,建立了一个数据插入的OleDbCommand,注意一点,在建立这个OleDbCommand的时候,我们这里没有使用“@”标志而是使用“?”来代替输入变量。另外,对于SQL.NET而言,因为其提供了一个SqlDbType.Image的数据类型,该类型对数据限制大小为:2,147,483,647,相信绝大部分用户不会上传这样大的文件,因此,可以直接使用以下语句:MySqlCmd.Parameters.Add("@Image", SqlDbType.Image).Value = FileByteArray而在OleDb.NET中,是没有这样类型定义的,我们只能使用OleDbType.Binary类型,这样,对于上传的限制就是8000字节,如果上传文件大于该限制,就会出错,因此,在使用OleDb.NET的时候,我们就必须很清楚的设置上传文件的大小,代码如下:OleDbCmdObj.Parameters.Add("@Image", System.Data.OleDb.OleDbType.Binary, FileLength).Value = FileByteArray
      

  5.   

    显示数据库中的图像数据前文我们介绍了利用OleDb.NET将图片保存到数据库的实现方法,现在,我们同样使用OleDb.NET将来自数据库的图像数据在页面显示出来。首先,我们来看实现数据显示的类,代码如下:namespace UploadSample {
    public class MainDisplay : System.Web.UI.Page {
    public void Page_Load(System.Object sender, System.EventArgs e) {
    int ImgID = System.Convert.ToInt32(Request.QueryString["ImgID"]);System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +"Integrated Security=SSPI;Initial Catalog=northwind");System.String SqlCmd = "SELECT * FROM Images WHERE ImageID = ?";System.Data.OleDb.OleDbCommand OleDbCmdObj = new System.Data.OleDb.OleDbCommand(SqlCmd, Con);OleDbCmdObj.Parameters.Add("@ImageID", System.Data.OleDb.OleDbType.Integer).Value = ImgID;
    Con.Open();
    System.Data.OleDb.OleDbDataReader OleReader = OleDbCmdObj.ExecuteReader();OleReader.Read();
    Response.ContentType = (string)OleReader["ContentType"];
    Response.OutputStream.Write((byte[])OleReader["Image"], 0, (int)OleReader["ByteSize"]);
    Response.End();
    Con.Close();
    }
    }
    }
      

  6.   

    to :goody9807() 
    大哥,我用的是oracle数据库,并且是system.oracleclient空间
      

  7.   

    写Blob的例子如下:
    http://www.akadia.com/services/dotnet_orablobs.html
    至于数据库名的问题你自己重新配置一下本地服务名,改短一点就可以了