Запазване и извличане на .avi файл от Oracle 11g с помощта на c#

Искам да запиша в таблица от моята база данни .avi файл с помощта на c# и Oracle 11g.

Масата е проста

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 файлът вече е зададен и db има достъп до него, защото изображенията, които запазвам, работят почти по същия начин


След като видеоклипът бъде запазен, искам да го извлека, като използвам тази процедура

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 media player. Това е кодът, който иска да постигне това

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();
                }

Проблемът е, че файлът е записан на посочения път, но не може да бъде възпроизведен, докато оригиналният файл, който е качен, се възпроизвежда на същия плейър.

Пропускам ли нещо, може ли някой да даде по-добра идея. Всеки отговор е високо оценен!


person Bogdan    schedule 20.01.2012    source източник


Отговори (1)


Ако сте в уеб приложение, мисля, че трябва да посочите типа на съдържанието от страна на html, така че да може да показва съответното съдържание.

person Rika    schedule 13.09.2014