.net2003中有OracleConnection,可用此处理,处理方法如下:
以下实例中的Command为OracleCommand,我是定义为存储过程。
1.获取BLOB:
public byte[] GetPersonPhotoByID( object id )
{
IDbCommand cmd = pb.SelectPhotoCommand();
try
{
((IDataParameter)cmd.Parameters[0]).Value = id;
if ( cmd.Connection.State != ConnectionState.Open)
cmd.Connection.Open();
cmd.ExecuteNonQuery();
OracleLob lob = (OracleLob)((OracleParameter)cmd.Parameters[1]).Value;
if( lob.IsNull )
return null;
byte[] imgData = new byte[lob.Length];
    lob.Read( imgData,0,(int)lob.Length);
cmd.Connection.Close();
return imgData;
}
catch//(Exception ex)
{
cmd.Connection.Close();
return null;
}
}2.插入:
public void AddPersonPhotoByID( object id,byte[] photo )
{
OracleConnection conn = (OracleConnection)CommonData.DbOperator.Connection;
if( conn.State != ConnectionState.Open )
conn.Open();
OracleTransaction trans = (OracleTransaction)conn.BeginTransaction();
OracleCommand cmd = conn.CreateCommand();
cmd.Transaction = trans;
cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
cmd.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
try
{
cmd.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(photo,0,photo.Length);
tempLob.EndBatch();
cmd.Parameters.Clear();
cmd.CommandText = "SP_INSERT_A98";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("v_ID", OracleType.Char,10)).Value = id;
cmd.Parameters.Add(new OracleParameter("v_PHOTO", OracleType.Blob)).Value = tempLob;
cmd.ExecuteNonQuery();
trans.Commit();
conn.Close();
}
catch//( Exception ex )
{
conn.Close();
trans.Rollback();
return;
}
}3.修改: public void ModifyPersonPhotoByID( object id,byte[] photo )
{
OracleConnection conn = (OracleConnection)CommonData.DbOperator.Connection;
if( conn.State != ConnectionState.Open )
conn.Open();
OracleTransaction trans = (OracleTransaction)conn.BeginTransaction();
OracleCommand cmd = conn.CreateCommand();
cmd.Transaction = trans;
cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
cmd.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
try
{
cmd.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(photo,0,photo.Length);
tempLob.EndBatch();
cmd.Parameters.Clear();
cmd.CommandText = "SP_UPDATE_A98";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("v_ID", OracleType.Char,10)).Value = id;
cmd.Parameters.Add(new OracleParameter("v_PHOTO", OracleType.Blob)).Value = tempLob;
cmd.ExecuteNonQuery();
trans.Commit();
conn.Close();
}
catch//( Exception ex )
{
conn.Close();
trans.Rollback();
return;
}
}