C# 将大BLOB插入Oracle数据库
Oracle有一个关于如何在Java中插入大blob的示例。是否可以在C#中执行相同的操作?是的,将参数设置为:C# 将大BLOB插入Oracle数据库,c#,oracle,blob,C#,Oracle,Blob,Oracle有一个关于如何在Java中插入大blob的示例。是否可以在C#中执行相同的操作?是的,将参数设置为: var param = cmd.Parameters.Add("blobInParam", OracleDbType.Blob); param.Direction = ParameterDirection.Input; // Assign Byte Array to Oracle Parameter param.Value = blobData; 一个带有流的答案: str
var param = cmd.Parameters.Add("blobInParam", OracleDbType.Blob);
param.Direction = ParameterDirection.Input;
// Assign Byte Array to Oracle Parameter
param.Value = blobData;
一个带有流的答案:
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
s具有:最大大小:(4 GB-1)*DB_BLOCK_大小初始化参数(8 TB到128 TB)
。所以从数据库的角度来看,它应该是可行的。
但是,您可能需要注意连接超时和连接寿命,因为通过网络传输如此大的文件需要很长时间(我想,我不知道您的设置)。而且我脑子里想,字节必须始终是偶数,对吗?。只是补充一下,也许值得一提的是,我不能诚实地说我见过这种局限性;但这并不意味着它不在那里!如何将二进制流设置为blob,例如OutputStream outstream=blob.setBinaryStream(1L)@AllanElder这是我的一个错误,只有
CLOB
s需要偶数个字节<代码>水滴s不!啊。。这很有意义,每个字符有2个字节。事实上我想我找到了我要找的-你需要创建一个OracleBlob,将你的大内容流式传输到它(Oracle将把它流式传输到db),然后将OracleBlob作为参数分配给连接,在这一点上它会被实际写入tableMhm好的,听起来不错。确定上述方法也不起作用吗?我通常也会这样做,使用阅读器,在查询结束时使用从数据库中读取BLOB列进行更新,然后使用阅读器获取OracleBlob,如:oracleblob1=reader.GetOracleBlob(int\u BLOB\u columnnumber)编码>并使用BLOB1。写入(数据、索引、长度)
然后。。。(使用事务)我这里的主要问题是如何插入不可能完全保存在内存中的blob。是的,很难在内存中保存1 TB。。。那么你可以发布一个有效的例子吗?我会尽快让它真正发挥作用。感谢您的建议和评论!