【发布时间】:2012-02-14 15:47:13
【问题描述】:
我想使用 c# 和 Oracle 11g 在我的数据库中的表中保存一个 .avi 文件。
表格很简单
CREATE TABLE VIDEOS
(
id number,
description varchar2(20),
video ORDSYS.OrdVideo
);
我正在做的是在 c# 中使用表单获取一些字段并从 Oracle db 调用一个过程
程序是
create or replace
procedure inserareVideoBD(vid in number, vdescriere in varchar2, nfis in varchar2 )
is
begin
declare
obj ORDSYS.ORDVideo;
ctx RAW (64):=NULL;
begin
insert into videos values (vid, vdescriere, ordsys.ordvideo.init('FILE', 'DIR', nfis));
commit;
end;
end;
// 提到 DIR 文件已经分配并且数据库可以访问它,因为我保存的图像几乎以相同的方式工作
所以在保存视频后,我想使用此过程检索它
create or replace
procedure FETCHERVIDEO (vid in number, flux out blob, descriere out varchar2)
is
begin
declare
obj ordsys.ordvideo;
mimeType VARCHAR2(4000);
format VARCHAR2(31);
ctx RAW(64) :=NULL;
begin
select video into obj from videos where id=vid;
DBMS_LOB.CREATETEMPORARY(flux, true, 10);
obj.getContentInLob(ctx,flux, mimeType,format);
select description into descriere from videos where id=vid;
end;
end;
视频保存后,我想使用 windows 媒体播放器播放。这是要完成的代码
OracleCommand cmd1 = new OracleCommand("fetchervideo", con);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add("vid", OracleDbType.Int32);
cmd1.Parameters.Add("flux", OracleDbType.Blob);
cmd1.Parameters.Add("descriere", OracleDbType.Varchar2, 255);
cmd1.Parameters[0].Direction = ParameterDirection.Input;
cmd1.Parameters[1].Direction = ParameterDirection.Output;
cmd1.Parameters[2].Direction = ParameterDirection.Output;
//get video id
cmd1.Parameters[0].Value = Convert.ToInt32(comboBox1.SelectedItem);
try { cmd1.ExecuteScalar(); }
catch (OracleException exc) { Mesaj2.Text = "Mesaj: " + exc.Message; }
OracleBlob var = (OracleBlob)cmd1.Parameters[1].Value;
byte[] blob = new Byte[var.Length];
File.WriteAllBytes(@"c://temp_mvi.avi", blob);
try
{
player.URL = "c://temp_mvi.avi";
player.Ctlcontrols.play();
}
问题是文件保存在指定路径,但无法播放,而上传的原始文件在同一播放器上播放。
我错过了什么,任何人都可以给出更好的主意。 非常感谢您的每一个回复!
【问题讨论】:
标签: c# oracle stored-procedures oracle11g blob