Какраз таки, через DataBindings сделать это будет сложновато.
Когда-то я написал код хранящий массив в БД. Принцип тот-же, только этот код работает с SQL Server, а для Access нужно вместо SqlConnection, SqlCommand и т.п. использовать OleDbConnection, OleDbCommand. Собственно чтение из ДБ, осуществляеться методом ReadByteMas. Метод возвращает массив байтов, и уже этот массив нужно преобразовывать в картинку.
| Код | using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Data; using System.Data.SqlClient; using System.Runtime.Serialization.Formatters.Binary;
namespace Veles.Web {
public static class ArrayInDBClass {
public static byte[] StringMasToByteMas(string[] StringMas) { BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); formatter.Serialize(stream, StringMas); byte[] ByteMas = stream.ToArray();
stream.Close();
return ByteMas; }
public static void WriteByteMasToDB(string TableName, string ColName, string WhereStr, string WhereDef, byte[] ByteMas) { SqlConnection connection = new SqlConnection("server=localhost;database=Board;uid=temp;pwd=temptemp"); SqlCommand command = new SqlCommand("UPDATE " + TableName + " SET " + ColName + " = @NewInfo WHERE " + WhereStr + " = \'" + WhereDef + "\'", connection);
command.Parameters.Add("@NewInfo", SqlDbType.Image, ByteMas.Length).Value = ByteMas;
connection.Open(); command.ExecuteNonQuery(); }
public static string[] ByteMasToStringMas(byte[] ByteMas) { BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream();
stream.Write(ByteMas, 0, ByteMas.Length); stream.Seek(0, SeekOrigin.Begin);
string[] StringMas = new string[1];
try { StringMas = (string[])formatter.Deserialize(stream); } catch {
} stream.Close();
return StringMas; }
public static byte[] ReadByteMas(string TableName, string ColName, string WhereStr, string WhereDef) { SqlConnection connection = new SqlConnection("server=localhost;database=Board;uid=temp;pwd=temptemp"); SqlCommand command = new SqlCommand("SELECT " + ColName + " FROM " + TableName + " WHERE " + WhereStr + " = \'" + WhereDef + "\'", connection);
connection.Open(); SqlDataReader reader = command.ExecuteReader(); //CommandBehavior.SequentialAccess
byte[] ByteMas = new byte[1]; while (reader.Read()) {
try { byte[] ForReturn = reader.GetSqlBinary(0).Value; ByteMas = ForReturn; } catch {
} }
reader.Close(); connection.Close(); return ByteMas; } }
}
|
А вот примерчик из MSDN (на VB.NET):
| Код | Dim cn As New System.Data.OleDb.OleDbConnection("Your Connection String") Dim cmd As New System.Data.OleDb.OleDbCommand("Your Select Command", cn) Dim dr As System.Data.OleDb.OleDbDataReader Dim pictureColumn As Integer = 0 Dim b(Integer.MaxValue - 1) As Byte
cn.Open() dr = cmd.ExecuteReader() dr.Read() dr.GetBytes(pictureColumn, 0, b, 0, b.Length) dr.Close() cn.Close()
MessageBox.Show("Bytes read from database: " & b.Length.ToString())
Dim bs As System.IO.Stream = New System.IO.MemoryStream() bs.Write(b, 0, b.Length)
PictureBox1.Image = Image.FromStream(bs)
|
|