#c# #mysql #c#-4.0
#c# #mysql #c #-4.0
Вопрос:
string nama = dgGambar1.Rows[e.RowIndex].Cells["nama_gambar"].FormattedValue.ToString();
btnTambahDataBarang.Enabled = false;
koneksi.Open();
MySqlCommand command = new MySqlCommand("SELECT * FROM and_bwi_gambar WHERE nama_gambar = '" nama "'", koneksi);
MySqlDataReader rd;
rd = command.ExecuteReader();
while (rd.Read())
{
txtGambar1.Text = rd.GetValue(2).ToString();
byte[] img = (byte[])rd.GetValue(3);
MemoryStream ms = new MemoryStream(img);
pbGambar1.Image = Image.FromStream(ms);
}
koneksi.Close();
когда я получаю изображение, размер которого превышает 250 КБ, оно всегда выдает ошибку «недопустимый аргумент параметра»
Комментарии:
1. Какая строка кода вызывает ошибку?
2. Вы должны использовать аргументы привязки вместо интерполяции текста в новой MySqlCommand, чтобы избежать SQL-инъекции. Кроме того, назовите столбцы, а не используйте * .
3. @RobertHarvey ошибка строки на изображении. FromStream (мс);
4. Фраза «Недопустимый аргумент параметра» не используется в Google. Пожалуйста, укажите точную формулировку сообщения об ошибке, которое вы получаете.
5. @Ferdy Вы проверили, что данные изображения не повреждены. Метод Image. FromStream возвращает исключение ArgumentException, когда передаваемый вами поток не имеет допустимого формата изображения.
Ответ №1:
Для решения этой проблемы может быть 2 варианта:
- использование преобразователя изображений:
byte[] buffer = (byte[])rd.GetValue(3);
using(var memStream = new MemoryStream(buffer))
{
var ic = new System.Drawing.ImageConverter();
pbGambar1.Image = (System.Drawing.Image)ic.ConvertFrom(stream.ReadAllBytes());
}
- или попробуйте сначала загрузить двоичные данные в поток памяти:
byte[] buffer = (byte[])rd.GetValue(3);
using(var memStream = new MemoryStream(buffer))
{
memStream.Position = 0;
pbGambar1.Image = System.Drawing.Image.FromStream(memStream, false);
}
}