Click here to Skip to main content
15,311,717 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
I spent three days to pass 3 images using datatable to my report , and always shows broken image icon.

What I have tried:

1- create 3 fields in SQL table with Picture type .
SQL
CREATE TABLE [dbo].[Table1](
	[CountryID] [int] NOT NULL,
    [Stamp] [image] NULL,
	[EachPage] [image] NULL,
	[LastPage] [image] NULL,
 CONSTRAINT [PK_Tabl1] PRIMARY KEY CLUSTERED 
(
[CountryID] ASC
))

2- fill these picture in database, by converting them to array of bytes.
VB
<pre>  If IO.File.Exists(ImagePath) Then
            Dim con As SqlConnection = New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings.Item("Main").ConnectionString)
            Try

                Dim cmd As SqlCommand = New SqlCommand("UPDATE [Table1] set   Stamp  = @Stamp  where CountryID='" & CountryID & "'", con)
                con.Open()
         cmd.Parameters.AddWithValue("@Stamp", SqlDbType.Image).Value = ConverttoBinary(ImagePath)
                cmd.ExecuteNonQuery()

             
            Catch ex As Exception
               
            Finally
                If con.State = ConnectionState.Open Then
                    con.Close()
                End If
            End Try

        End If

3 - in visual studio , I've been created a Dataset contains a data table with these three fields "the Name is exactly the same".
Dataset screenshot
4- create a blank report , and I added this dataset as report data source .
as shown here in this screenshot :Report
5-Set report datasource the filled dataset .
VB
Public Function Get_DataTable(query As String, DataTableName As String) As PicturesDS
       Dim conString As String = ConfigurationManager.ConnectionStrings("Main").ConnectionString
       Dim cmd As New SqlCommand(query)
       Using con As New SqlConnection(conString)
           Using sda As New SqlDataAdapter()
               cmd.Connection = con

               sda.SelectCommand = cmd
               Using dsEmployees As New PicturesDS()
                   sda.Fill(dsEmployees, DataTableName)
                   Return dsEmployees
               End Using
           End Using
       End Using
   End Function

6-show report.
VB
Private Sub TstImage()


    Dim cryRpt As ReportDocument = New ReportDocument()
    '     cryRpt.Load(Server.MapPath(ReportPath))
    cryRpt.Load(Server.MapPath("TstImage.rpt"))

    CrystalReportViewer1.ReportSource = cryRpt
    Dim SQLQuery As String = "Select *  FROM [Table1] where CountryID =1 "


    cryRpt.SetDataSource(db.Get_DataTable(SQLQuery, "DTPic"))
    GC.Collect()



End Sub


the result like this :

Broken Image
What I Miss ,
I
Posted
Updated 8-Dec-21 20:07pm
Comments
besthms 7-Dec-21 15:00pm
   
Thank you for your advice , but this will not fix my issue , am I right ?
Richard Deeming 8-Dec-21 3:57am
   
Fixing the security vulnerability will fix the bigger issue of your data being deliberately or accidentally altered or destroyed, or sensitive data being exposed inappropriately leading to a massive fine.
besthms 9-Dec-21 2:41am
   
Thank you

1 solution

Ensure you have added Image handler in web.config. Below article has required info.
Display image from database in Crystal Report in ASP.Net using C# and VB.Net[^]
Also check this too
Store and Retrieve Image in Crystal Reports From SQL Database and Folder Using ASP.Net[^]
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900