Oracle的documentation有一个关于如何在Java中插入大型BLOB的示例。是否有可能在C#中做同样的事情?
答案 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;)
老实说我不知道,我不能在这里用这么大的文件试试。但BLOB
为specified by Oracle,其中Maximum size: (4 GB - 1) * DB_BLOCK_SIZE initialization parameter (8 TB to 128 TB)
为:Connection Timeout
。所以从数据库方面来说它应该可行。
但是你 MAYBE 需要关注Connection Lifetime
和{{1}},因为通过网络传输这么大的文件需要很长时间(我想,我不知道你的设置。)