ASP.net 操作 Oracle 的 Blob 字段

来源:互联网 发布:家用天文望远镜 知乎 编辑:程序博客网 时间:2024/05/21 13:15
最近在做个项目,导师要求一定要用 Oracle 来存数据。所以有一个功能是要把图片等文件都存到 Oracle 的 Blob 字段里。上网搜了好久,没发现有哪个地方是讲得清楚的,最后还是得自己摸索出来。

用的是 Asp.net(C#),Odbc 方式连接 Oracle。

OdbcConnection conn = new OdbcConnection(m.connstring());
OdbcCommand ocm = new OdbcCommand();
conn.Open();
ocm.Connection = conn;
// 上面都是基本的打开数据库连接的语句

HttpPostedFile file = file1.PostedFile; // file1 是 <input type="file" 的网页对象
System.IO.BinaryReader br = new System.IO.BinaryReader(file.InputStream);
byte[] blob = new byte[file.ContentLength]; // 将 POST 过来的文件内容读成 byte[] 的形式
blob = br.ReadBytes(file.ContentLength); // 读进来之后,等一下写进数据库里面

ocm.CommandText = "update person set photo=? where pid=" + ipid; // photo 就是这的 Blob 字段

// 就这么写进这个 photo 字段里面,主要是类型是 OdbcType.Binary。如果不是用 ODBC 而是用 ADO 的,这里也是xxx.Binary 这样的
ocm.Parameters.Add("photo", OdbcType.Binary, file.ContentLength).Value = blob;
ocm.ExecuteNonQuery();


读的时候,用一个 aspx 文件来动态的生成图像数据就不用生成一个临时文件了(至少不用自己维护这些临时文件)。 比如:
ocm.CommandText = "select photo from person where pid=?";
ocm.Parameters.Add("pid", OdbcType.Char).Value = ipid;
ocm.Connection = conn;
odr = ocm.ExecuteReader();

if (odr.HasRows)
{
    Response.ContentType = "image/jpeg"; // 说明它的格式
    Response.OutputStream.Write(((byte[])odr["photo"]), 0, ((byte[])odr["photo"]).Length);
    //从数据库中读出来,以流的形式发送出去
}
原创粉丝点击