Здравствуйте, Janii, Вы писали:
J>Здравствуйте, Lloyd, Вы писали:
L>>И что вы дальше собрались с этим делать. Написано-же "OLE-объект".
J>Да, сорри, ступил немного. Если вопрос именно "как вытащить картинку из OLE-обьекта", то мой пост на этот вопрос не отвечает. Ставлю себе минус за невнимательность
вы правы!имея массив байт вы можете залить картинку через FileStreamWriter
try
{
int PictureCol = 0; // Position of picture column in DataReader.
int BUFFER_LENGTH = 32768;// Chunk size.
OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=db1.mdb;User ID=Admin;Password=;");
// Make sure Photo is non-NULL and return TEXTPTR to it.
OleDbCommand cmdGetPointer = new OleDbCommand("SELECT ?=TEXTPTR(Picture), ?=DataLength(Picture) FROM t_Answers WHERE Id=1099007", cn);
OleDbParameter PointerOutParam = cmdGetPointer.Parameters.Add("@Pointer", OleDbType.VarBinary, 100);
PointerOutParam.Direction = System.Data.ParameterDirection.Output;
OleDbParameter LengthOutParam = cmdGetPointer.Parameters.Add("@Length", OleDbType.Integer);
LengthOutParam.Direction = System.Data.ParameterDirection.Output;
cn.Open();
try
{
cmdGetPointer.ExecuteNonQuery();
}
catch (Exception e)
{
Console.Write(e.Message);
}
//if (PointerOutParam.Value == null)
//{
// cn.Close();
// // Add code to deal with NULL BLOB.
// return;
//}
// Set up READTEXT command, parameters, and open BinaryReader.
OleDbCommand cmdReadBinary = new OleDbCommand("READTEXT t_Answers.HtmlContCmpr ? ? ? HOLDLOCK", cn);
OleDbParameter PointerParam = cmdReadBinary.Parameters.Add("@Pointer", OleDbType.Binary, 16);
OleDbParameter OffsetParam = cmdReadBinary.Parameters.Add("@Offset", OleDbType.Integer);
OleDbParameter SizeParam = cmdReadBinary.Parameters.Add("@Size", OleDbType.Integer);
OleDbDataReader dr;
System.IO.FileStream fs = new System.IO.FileStream(Console.ReadLine(), System.IO.FileMode.Create, System.IO.FileAccess.Write);
int Offset = 0;
OffsetParam.Value = Offset;
Byte[] Buffer = new Byte[BUFFER_LENGTH];
//Read buffer full of data and write to the file stream.
do
{
PointerParam.Value = PointerOutParam.Value;
// Calculate buffer size — may be less than BUFFER_LENGTH for last block.
if ((Offset + BUFFER_LENGTH) >= System.Convert.ToInt32(LengthOutParam.Value))
SizeParam.Value = System.Convert.ToInt32(LengthOutParam.Value) — Offset;
else SizeParam.Value = BUFFER_LENGTH;
dr = cmdReadBinary.ExecuteReader(System.Data.CommandBehavior.SingleResult);
dr.Read();
dr.GetBytes(PictureCol, 0, Buffer, 0, System.Convert.ToInt32(SizeParam.Value));
dr.Close();
fs.Write(Buffer, 0, System.Convert.ToInt32(SizeParam.Value));
Offset += System.Convert.ToInt32(SizeParam.Value);
OffsetParam.Value = Offset;
} while (Offset < System.Convert.ToInt32(LengthOutParam.Value));
fs.Close();
cn.Close();
}
catch (OleDbException ex)
{
Console.Write(ex.Message);
Console.ReadLine();
}
нужна фдфптация под Access