Member 11335460 Ответов: 2

Как Отобразить Изображение Из Базы Данных В Отчет Crystal?


Здравствуйте Сэр,
Для хранения изображения я использовал байтовый формат & тип данных поля изображения-varchar(MAX).Но в crystal report изображение не отображается.И я разрабатываю это в форме WINDOWS.
Пожалуйста, помогите мне.

2 Ответов

Рейтинг:
12

Sid_Joshi

public byte[] convertImageToByteArray(System.Drawing.Image image)
        {
            MemoryStream ms = new MemoryStream();
            
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                // or whatever output format you like
                return ms.ToArray();
            
        }
//Save Data
        private void button1_Click(object sender, EventArgs e)
        {
            byte[] imgbnry = convertImageToByteArray(pictureBox1.Image);
 
            string str = "insert into tbl_img (id,photo)values('" + textBox1.Text + "',@img)";
 
            string ConStr = @"Server=COMP7;Database=ImageTest;User Id=sa;Password=cos123";
 
            SqlConnection con = new SqlConnection(ConStr); 
            con.Open();
            SqlCommand cmd = new SqlCommand(str, con);
 
            cmd.Parameters.AddWithValue("@img", imgbnry);
            int n = cmd.ExecuteNonQuery();
            if (n > 0)
            {
                MessageBox.Show("Successfully inserted");
            }
            else
            {
                MessageBox.Show("Not inserted");
            }
            
        }


//retrive Data
 Collapse | Copy Code
private void button2_Click(object sender, EventArgs e)
        {
            string str = "select photo from tbl_img where id='" + textBox2.Text + "'";
 
            string ConStr = @"Server=COMP7;Database=ImageTest;User Id=sa;Password=cos123";
 
            SqlConnection con = new SqlConnection(ConStr); 
 
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(str, con);
            DataTable dt = new DataTable();
 
            da.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                byte[] imgdata = new byte[0];
                imgdata = (byte[])dt.Rows[0][0];
                MemoryStream ms = new MemoryStream(imgdata);
                pictureBox2.Image = Image.FromStream(ms);      
            }
            else
            {
                MessageBox.Show("No images in a table");
            }
        }


используйте тип данных image для хранения изображения на sql server.
прикрепите эту таблицу к отчету crystal.


Member 11335460

Спасибо за ответ.
При извлечении изображения он дает исключение ,
Значение параметра системы"не является допустимым"

Sid_Joshi

какой тип данных вы используете?
используйте тип данных Image для хранения изображения на sql server

Member 11335460

да я использую image datatype но все равно получил такое же исключение

Sid_Joshi

откуда у вас ошибка?
в crystal report или показ изображения в pictureBox2?

Member 11335460

Я получаю ошибку при показе изображения "pictureBox2. Image = Image.FromStream (ms);" на этой линии.

Sid_Joshi

проверять
imgdata = (byte[])dt. Rows[0][0];
второй [0] - это индекс столбца. используйте правильный индекс для столбца изображения

Sklbns

Мне тоже, я получил ту же ошибку.
это мой запрос " выберите изображение из qrcode, где qr_no = 10"
это ошибка"System ArgumentException" параметр недопустим"

Member 11335460

- Спасибо, сэр.
но на кристалл изображение не отображается

Sid_Joshi

Перетащите изображение поля на отчет Crystal из области проводника-&ГТ;поле&базы данных и GT;имя-&ГТ таблица;столбец имя

Member 11335460

- Спасибо, сэр.
Это мне очень помогает.

Member 13373336

Для тех, кто получает сообщение "параметр недопустим", проверьте свой оператор insert из строки str. Убедитесь, что у вас нет одинарных кавычек вокруг @img при отправке изображения.

Если вы выполните отладку, то увидите, что в разделе imgdata у вас есть только 4-5 индексов. Если вы проверите значения ascii в элементах, вы заметите, что они представляют @ i m g, потому что это то, что вы пишете в SQL при сохранении изображения (если вы запросите таблицу в SQL, вы заметите, что значение поля короткое. Изображения не короткие).

Надеюсь, это поможет!

Рейтинг:
1

Prasad Khandekar

Привет,

Взгляните на этот[^] статья о фрагментах ASP.

С уважением,