Continuiamo la "saga" dell'interazione tra .NET e i campi BLOB di Oracle tramite l'uso della librearia ODP.NET.
Dopo aver parlato di come creare una procedura per inserire i file dal file system all'intero della base di dati, e di come leggere il contenuto di una colonna di tipo BLOB da un'applicazione .NET, oggi vediamo la sintassi .NET pe inserire un file nel database.

La peculiarità del modo in cui andremo ad effettuare il trasferimento, sta nel passare ad un oggetto OracleCommand, una query SQL che non è altro che un blocco PL/SQL anonimo, che ci permette di specificare una query parametrica d'inserimento, i cui parametri verranno poi attaccati al command.
Prendendo sempre spunto dalla tabelle creata nel primo post della serie, questo il codice per l'inserimento, dato uno stream di dati.

C#

using Oracle.DataAccess.Client;

using Oracle.DataAccess.Types;

public void Page_Load(Object sender, EventArgs e)
{
string strConn = "Data Source=Test;User Id=Test;Password=Test;";
//Blocco PL/SQL anonimo string query = "BEGIN " +
"INSERT INTO provaBlob (fileName, file) " +
"VALUES (:1, :2) " +
"END;";
OracleConnection conn = null;
OracleCommand cmd = new OracleCommand(query, conn);

//Parametri per la query d'inserimento OracleParameter par1 = new OracleParameter("nomefile", OracleDbType.Varchar2);
par1.Direction = ParameterDirection.Input;
par1.Value = "prova2.xml";
OracleParameter par2 = new OracleParameter("myblob", OracleDbType.Blob);
par2.Direction = ParameterDirection.Input;
Stream inStream = stream;
byte[] buffer = new byte[stream.Length];
inStream.Read(buffer, 0, Convert.ToInt32(stream.Length));
par2.Value = inStream;

//Aggiungo i due parametri al command cmd.Parameters.Add(par1);
cmd.Parameters.Add(par2);

//Eseguo l'inserimento try
{
using(conn = new OracleConnection(strConn))
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
catch(Exception exe)
{ //Gestione eccezioni ... } }

VB.NET
Imports Oracle.DataAccess.Client

Imports Oracle.DataAccess.Types;

Public Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

Dim strConn As String = "Data Source=Test;User Id=Test;Password=Test;"
'Blocco PL/SQL anonimo Dim query As String = "BEGIN " & _
"INSERT INTO provaBlob (fileName, file) " & _
"VALUES (:1, :2) " & _
"END;"
Dim conn As New OracleConnection(strConn);
Dim cmd As New OracleCommand(query, conn)

'Parametri per la query d'inserimento Dim par1 As New OracleParameter("nomefile", OracleDbType.Varchar2)
par1.Direction = ParameterDirection.Input
par1.Value = "prova2.xml"
Dim par2 As New OracleParameter("myblob", OracleDbType.Blob)
par2.Direction = ParameterDirection.Input
Dim inStream As Stream = stream
Dim buffer As New Byte(stream.Length)
inStream.Read(buffer, 0, Convert.ToInt32(stream.Length))
par2.Value = inStream

'Aggiungo i due parametri al command cmd.Parameters.Add(par1)
cmd.Parameters.Add(par2)

'Eseguo l'inserimento Try
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Catch ex As Exception
'Gestione eccezioni ... Finally
conn.Dispose()
cmd.Dispose()
End Try
}

Vi ricordo che la variabile "stream" è lo stream di dati del vostro file.