将大型BLOB插入Oracle数据库

时间:2014-10-01 15:29:34

标签: c# oracle blob

Oracle的documentation有一个关于如何在Java中插入大型BLOB的示例。是否有可能在C#中做同样的事情?

2 个答案:

答案 0 :(得分:0)

是的,将参数设置为:

var param = cmd.Parameters.Add("blobInParam", OracleDbType.Blob);
param.Direction = ParameterDirection.Input;   

// Assign Byte Array to Oracle Parameter
param.Value = blobData;

答案 1 :(得分:0)

有关流的答案:

string path = @"D:\testfile.txt";
System.IO.FileStream myStream = new System.IO.FileStream(@path, FileMode.Open);

BinaryReader binaryReader = new BinaryReader(myStream);
byte[] data = binaryReader.ReadBytes((int)myStream.Length); //read the stream into byte

String sql =  "INSERT INTO testblob (testid, testblob) VALUES (100, :blobtodb)";       

OracleCommand cmd = new OracleCommand();
cmd.CommandText = sql; // Set the sql-command
cmd.Connection = con; //con is an OracleConnection, create it before

OracleParameter param = cmd.Parameters.Add("blobtodb", OracleDbType.Blob); //Add the parameter for the blobcolumn
param.Direction = ParameterDirection.Input; 

param.Value = data; //Asign the Byte Array to the parameter
cmd.ExecuteNonQuery(); //You are done!

这适用于每个流;)


对于(超过)1TB的文件:

警告:对大文件使用OPs解决方案,因为内存中很难有1TB;)

老实说我不知道​​,我不能在这里用这么大的文件试试。但BLOBspecified by Oracle,其中Maximum size: (4 GB - 1) * DB_BLOCK_SIZE initialization parameter (8 TB to 128 TB)为:Connection Timeout。所以从数据库方面来说它应该可行。 但是你 MAYBE 需要关注Connection Lifetime和{{1}},因为通过网络传输这么大的文件需要很长时间(我想,我不知道你的设置。)