2012-01-09 15 views
1

vb.netを使用していくつかのExcelファイルを処理するデスクトップアプリケーションがあります。これらのファイルはSQL Serverデータベースに格納されています。私は取得していますRetrieve vb.netを使用してSQL Serverに格納されたexcelファイル

Try 
     conDCS.Open() 
     comDCS.Connection = conDCS 
     comDCS.CommandType = CommandType.Text 
     comDCS.CommandText = "select top 2 [Filename], [File] " & _ 
          "from tblFiles (nolock) " & _ 
          "where ([Filename] like 'DIG%' or [Filename] like 'FAC%') and " & _ 
          "(UploadDate>='" & FromDate & "' and UploadDate<'" & ToDate & "')" 
     comDCS.ExecuteNonQuery() 
     rdrDCS = comDCS.ExecuteReader 
     If rdrDCS.HasRows Then 
      While rdrDCS.Read 
       Dim imageInBytes As Byte() = rdrDCS(1) 
       Dim memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream(imageInBytes, False) 
       Dim image As System.Drawing.Image = System.Drawing.Image.FromStream(memoryStream) 
       image.Save(TempPath & rdrDCS(0)) 
      End While 
      ToProcess = True 
     End If 
     rdrDCS.Close() 
    Catch ex As Exception 
     ToProcess = False 
     MessageBox.Show("Error accessing to the files: " & ex.Message) 
    Finally 
     conDCS.Close() 
    End Try 

:ここに は、私が持っているコードです。この行では、「パラメータが有効ではありません」:私は、このエラーは、無効な画像データに関連していることを理解している

Dim image As System.Drawing.Image = System.Drawing.Image.FromStream(memoryStream) 

しかし、私はそれが問題であるかもしれないことを理解できません。

imageInBytesの長さは41473です。また、配列の一部の項目には値としてゼロがあります。

ここで何が間違っているのでしょうか、それとも誰かがこれを達成するために動作するコードを提供できますか?

+1

あなたはExcelファイルを処理していると言います、その後、データを画像ファイルにストリーミングしようとしています。あなたはデータベース、Excelファイル、または画像ファイルから何を読んでいますか? – briddums

+1

私はちょうどそれを見ていた、DBはフィールド型の画像に格納されていますが、それはxlsファイルで、私はSystem.drawing.Imageとして画像を使用しています。問題は、Excelファイルにはどうすればいいですか? – Somebody

答えて

3

私たちは、ファイルにデータベースフィールドからファイルを保存するために一般的な方法を使用します。

Public Function FieldToFile(ByVal sFileName As String, ByVal theField As Object) As Boolean 
    ' Exceptions are handled by the caller 

    If theField IsNot DBNull.Value Then 
     Using oStream As New System.IO.FileStream(sFileName, IO.FileMode.Create, IO.FileAccess.Write) 
      If oStream IsNot Nothing Then 
       Dim aBytes As Byte() 

       aBytes = DirectCast(theField, Byte()) 

       oStream.Write(aBytes, 0, aBytes.Length) 
       oStream.Close() 
      End If 
     End Using 
    End If 

    Return True 
End Function 

次のようにこれを呼び出すことができます。

Call FieldToFile(someFileName, rdrDCS(1) 
+0

これは完璧に働いた、ありがとう@competent_tech! – Somebody