Я хочу экспортировать все фотографии из нашей базы данных в таблицу данных.Затем я переберу таблицу и сохраню каждое изображение на диск.Есть около 7000 фотографий.
Когда я запускаю процесс, я могу получить около 4000 фотографий, прежде чем я начну получать сообщения об ошибках, такие как, Исключение типа 'System.OutOfMemoryException'.
Если я изменю SQL-запрос наизвлеките вдвое меньше фотографий, скажем 3500, затем процесс завершится успешно.Хотя теперь я добился того, чего хотел, изменяя SQL каждый раз, когда запускаю код, я хотел бы улучшить свой код, чтобы возвращались все 7000 фотографий.Может ли кто-нибудь, пожалуйста, посоветовать лучший процесс.
Вот мой метод
public static DataTable GetAllPhotos()
{
DataTable dt = new DataTable();
dt.Columns.Add("personId", typeof(string));
dt.Columns.Add("Photo", typeof(Bitmap));
string SQL = "";
byte[] getImg = new byte[0];
byte[] BitmapImg = new byte[0];
string personId = "";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = _connString;
SQL = @"select per.person_id,pho.photo
from person as per
left join photo as pho on per.photo_id = pho.photo_id
where photo is not null";
conn.Open();
SqlDataReader dr = null;
SqlCommand cmd = new SqlCommand(SQL, conn);
dr = cmd.ExecuteReader();
while (dr.Read())
{
try
{
getImg = (byte[])dr["Photo"];
personId = Convert.ToString(dr["person_id"]);
MemoryStream str = new MemoryStream(getImg);
Bitmap bitmap = new Bitmap(Image.FromStream(str));
BitmapImg = ImageToByte(bitmap);
dt.Rows.Add(personId, bitmap);
}
catch (Exception ex)
{
LogWriter.WriteLine(personId + ex.Message.ToString());
}
}
conn.Close();
return dt;
}