【高分求解】如何用将本地文件以二进制形式存入oracle数据库

bw555 2008-10-24 10:19:48
我的开发环境是vb.net2003+oracle的模式,
最好有实现的代码,谢谢
...全文
119 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hebo2005 2008-10-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bw555 的回复:]
blob字段存储的数据太小,我 想把文件存储在long raw字段中
[/Quote]
第一次看到有说BLOB小,反而要用long
BlueskyWide 2008-10-25
  • 打赏
  • 举报
回复
再引用参考一下:

/--ASP中的处理:
<%@ LANGUAGE= "VBSCRIPT " %>
<%
Response.Expires = 0
Response.Buffer = TRUE
Response.Clear

Response.ContentType = "image/gif "

set cn=Server.Createobject( "adodb.connection ")
cn.open "Provider=OraOLEDB.Oracle;data source=DU;user id=SCOTT;password=******; "
Set rs = cn.Execute( "SELECT FPIC FROM BLOB_TBL WHERE FID = 1 ")
Response.BinaryWrite rs( "FPIC ")
Response.End
%>
BlueskyWide 2008-10-25
  • 打赏
  • 举报
回复
--引用参考一下:

文件的存储:
CONNECT SYS/****** AS SYSDBA;
CREATE DIRECTORY MAPDIR AS 'E:\ERP';
GRANT READ,WRITE ON DIRECTORY MAPDIR TO SCOTT;

CONNECT SCOTT/******;

CREATE TABLE BLOB_TBL(FID INTEGER,FNAME VARCHAR2(50),FPIC BLOB);

DECLARE
srcFile BFILE;
dstFile BLOB;
lenFile BINARY_INTEGER;
BEGIN
srcFile := BFILENAME( 'MAPDIR ', 'big.gif ');
INSERT INTO BLOB_TBL VALUES(1, 'Big1 ', EMPTY_BLOB())
RETURNING FPIC INTO dstFile;

SELECT FPIC INTO dstFile FROM BLOB_TBL FOR UPDATE;

DBMS_LOB.FILEOPEN(srcFile, DBMS_LOB.FILE_READONLY);
lenFile := DBMS_LOB.GETLENGTH(srcFile);
DBMS_LOB.LOADFROMFILE(dstFile, srcFile, lenFile);

UPDATE BLOB_TBL SET FPIC = dstFile WHERE FID = 1;

DBMS_LOB.FILECLOSE(srcFile);

COMMIT;
END;
/


[Quote=引用楼主 bw555 的帖子:]
我的开发环境是vb.net2003+oracle的模式,
最好有实现的代码,谢谢
[/Quote]
bw555 2008-10-25
  • 打赏
  • 举报
回复
关于DBMS_LOB包上网查了一下,只能存入不能读取,存入不是没有意义了
hongqi162 2008-10-24
  • 打赏
  • 举报
回复
msdn里面就有演示程序,使用oraclelob来处理blob字段,将你的文件读到一个byte buffer里面然后进行下面操作

OracleConnection connection = new OracleConnection("server=MyServer; integrated security=yes;");
connection.Open();
OracleTransaction transaction = connection.BeginTransaction();
OracleCommand command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
command.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)command.Parameters[0].Value;
byte[] tempbuff = new byte[10000];
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
command.Parameters.Clear();
command.CommandText = "MyTable.MyProc";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
command.ExecuteNonQuery();
transaction.Commit();
vc555 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bw555 的回复:]
blob字段存储的数据太小,我 想把文件存储在long raw字段中
[/Quote]
太小?现在的BLOB能支持到8T,而long raw是oracle已经淘汰的格式,仅为了兼容性而保留!
BlueskyWide 2008-10-24
  • 打赏
  • 举报
回复
java2000_net(老紫竹)好象擅长于编小程序,直接导入数据流文件。

LZ可以向他请教(http://topic.csdn.net/u/20081009/16/9698d26c-f536-4eae-a420-b8cf0391b4f1.html)。


[Quote=引用楼主 bw555 的帖子:]
我的开发环境是vb.net2003+oracle的模式,
最好有实现的代码,谢谢
[/Quote]
bw555 2008-10-24
  • 打赏
  • 举报
回复
blob字段存储的数据太小,我 想把文件存储在long raw字段中
oracledbalgtu 2008-10-24
  • 打赏
  • 举报
回复

参考下面的oracle代码:
CREATE TABLE image(NAME VARCHAR2(100),DATA BLOB);
--存一个图片文件到blob字段
DECLARE
LOB_LOC BLOB;
SRC_FILE BFILE;
DST_FILE BLOB;
LGH_FILE BINARY_INTEGER;
BEGIN
INSERT INTO IMAGE
VALUES
('my_1.png', EMPTY_BLOB())
RETURNING DATA INTO LOB_LOC;

SRC_FILE := BFILENAME('DDD', 'my.png');

SELECT DATA INTO DST_FILE FROM IMAGE WHERE NAME = 'my_1.png' FOR UPDATE;

DBMS_LOB.FILEOPEN(SRC_FILE, DBMS_LOB.FILE_READONLY);
LGH_FILE := DBMS_LOB.GETLENGTH(SRC_FILE);
DBMS_LOB.LOADFROMFILE(DST_FILE, SRC_FILE, LGH_FILE);

UPDATE IMAGE SET DATA = DST_FILE WHERE NAME = 'my_1.png';

DBMS_LOB.FILECLOSE(SRC_FILE);
COMMIT;
END;
/


[Quote=引用楼主 bw555 的帖子:]
我的开发环境是vb.net2003+oracle的模式,
最好有实现的代码,谢谢
[/Quote]
sleepzzzzz 2008-10-24
  • 打赏
  • 举报
回复
如果你一定要用vb.net2003的话,建议你google一下.
如果使用oracle存储过程实现,可使用DBMS_LOB包进行处理.
vc555 2008-10-24
  • 打赏
  • 举报
回复
网上搜搜blob相关资料。

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧