我的开发环境是vb.net2003+oracle的模式,
最好有实现的代码,谢谢

解决方案 »

  1.   

    如果你一定要用vb.net2003的话,建议你google一下.
    如果使用oracle存储过程实现,可使用DBMS_LOB包进行处理.
      

  2.   


    参考下面的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;
    /
      

  3.   

    blob字段存储的数据太小,我 想把文件存储在long raw字段中
      

  4.   

    java2000_net(老紫竹)好象擅长于编小程序,直接导入数据流文件。LZ可以向他请教(http://topic.csdn.net/u/20081009/16/9698d26c-f536-4eae-a420-b8cf0391b4f1.html)。
      

  5.   

    太小?现在的BLOB能支持到8T,而long raw是oracle已经淘汰的格式,仅为了兼容性而保留!
      

  6.   

    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();
      

  7.   

    关于DBMS_LOB包上网查了一下,只能存入不能读取,存入不是没有意义了
      

  8.   

    --引用参考一下:文件的存储: 
    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; 
    /
      

  9.   

    再引用参考一下:/--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 
          %> 
      

  10.   

    第一次看到有说BLOB小,反而要用long