Отчет SQL Image to Crystal - PullRequest
       13

Отчет SQL Image to Crystal

0 голосов
/ 19 октября 2018

Я хочу получить данные изображения из SQL Server 2008 Express и отобразить их непосредственно в Crystal Report.Я использую Visual Studio 2012 вместе с Crystal Reports для Visual Studio (также полная версия SAP Crystal Reports 2013).

Я пытался использовать примеры из поисков Google / SO, но мне не хватает хотя бы одного ключевого элемента.В моем проекте у меня есть набор данных с одним полем System.Byte(), Crystal Report и средство просмотра.

Вот фрагмент кода, который запрашивает базу данных, читает поток памяти и помещает данные изображения в набор данных.

 Dim ds As New DataSet1
   Dim row As DataRow

   Dim objConn As New SqlConnection(DatabaseConnection.CTLDataConnectionString)
   Dim objCommand As SqlCommand = objConn.CreateCommand
   objCommand.CommandText = "SELECT Content FROM Report WHERE HandlingUnitID = " & HandlingUID
   Dim dr As SqlDataReader = Nothing
   If objConn.State = ConnectionState.Closed Then objConn.Open()

   dr = objCommand.ExecuteReader

   If dr.HasRows Then
       dr.Read()
       Dim b() As Byte = DirectCast(dr("Content"), Byte())
       Using ms As New MemoryStream(b)
         ds.DataTable1.Rows.Add(b)
       End Using

   End If

   Dim rpt As New ShipLabel
   rpt.SetDataSource(ds.Tables("DataTable1"))

   Dim frm As New CRviewer
   frm.CRvwr.ReportSource = rpt
   frm.ShowDialog()

Откроется Crystal Viewer, но это пустой отчет.Я хочу знать, правильная ли у меня последовательность получения данных и правильно ли я храню их в наборе данных.

1 Ответ

0 голосов
/ 22 октября 2018

После гораздо большего чтения / исследования у меня есть следующие фрагменты кода, которые, по-видимому, имеют правильную последовательность и правильное хранение данных в наборе данных.Этот фрагмент взят из события cellclick.

 Dim ds As New DataSet1
   Dim row As DataRow

   Dim img As Bitmap

   Dim objConn As New SqlConnection(DatabaseConnection.CTLDataConnectionString)
   Dim objCommand As SqlCommand = objConn.CreateCommand
   objCommand.CommandText = "SELECT Content FROM Report WHERE HandlingUnitID = " & HandlingUID
   Dim dr As SqlDataReader = Nothing
   If objConn.State = ConnectionState.Closed Then objConn.Open()

   dr = objCommand.ExecuteReader

   If dr.HasRows Then
       dr.Read()
       Dim b() As Byte = dr("Content")

    Using ms As New MemoryStream(b)
        img = Image.FromStream(ms)
        b = ConvertImageToByte(img)
        ds.DataTable1.Rows.Add(b)
    End Using

   End If
   objConn.Close()

   Dim rpt As New ShipLabel
   rpt.SetDataSource(ds.Tables("DataTable1"))
   rpt.SetParameterValue("JobNumber", OrderNumber.ToString)

   Dim frm As New CRviewer
   frm.CRvwr.ReportSource = rpt
   frm.ShowDialog()

И эта функция:

Public Shared Function ConvertImageToByte(ByVal Value As Image) As Byte()
If Value IsNot Nothing Then
    Dim fs As MemoryStream = New MemoryStream()
    CType(Value, Bitmap).Save(fs, ImageFormat.Jpeg)
    Dim retval As Byte() = fs.ToArray()
    fs.Dispose()
    Return retval
End If

Return Nothing

Функция завершения

...