【发布时间】:2014-09-05 06:45:06
【问题描述】:
devart docs 上面写着:
请注意,将数据写入 OracleLob 对象会导致立即将数据传输到服务器。
但它没有提到这实际上是如何工作的。例如,在以下示例中(来自the docs):
public void UploadBlob(OracleConnection myConnection)
{
FileStream fs = new FileStream("D:\\Tmp\\_Water.bmp", FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
myConnection.Open();
OracleLob myLob = new OracleLob(myConnection,OracleDbType.Blob);
int streamLength = (int)fs.Length;
myLob.Write(r.ReadBytes(streamLength), 0, streamLength);
OracleCommand myCommand = new OracleCommand("INSERT INTO Pictures (ID, PicName, Picture) VALUES(1,'Water',:Pictures)", myConnection);
OracleParameter myParam = myCommand.Parameters.Add("Pictures", OracleDbType.Blob);
myParam.OracleValue = myLob;
try
{
Console.WriteLine(myCommand.ExecuteNonQuery() + " rows affected.");
}
finally
{
myConnection.Close();
r.Close();
fs.Close();
}
}
...然后根据文档,数据应该在线myLob.Write(r.ReadBytes(streamLength), 0, streamLength); 上发送到数据库服务器 - 但此时数据库不知道 blob 将存储在哪个“记录”中,所以我有点怀疑这实际上是如何工作的 - 数据写入哪里?是否有某种内存暂存区可供数据流式传输,并且根据我是提交还是回滚,数据在特定记录中可用(或在回滚时删除)?
【问题讨论】:
标签: c# sql oracle stream devart