J'essaie d'enregistrer un fichier binaire stocké dans une base de données SQL avec un SaveDialog, la fonction RetrieveFile récupère le fichier spécifié de la base de données en tant que tableau Byte, voici ce que j'ai jusqu'à présent:Enregistrer le fichier binaire de SQL Server
Private Shared Function RetrieveFile(ByVal filename As String) As Byte()
Dim connection As New SqlConnection("Data Source=SERVER\SQL2008;Initial Catalog=NorthPole;Integrated Security=True")
Dim command As New SqlCommand("SELECT pcfFile FROM Items WHERE [email protected]", connection)
command.Parameters.AddWithValue("@Filename", filename)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader(System.Data.CommandBehavior.SequentialAccess)
reader.Read()
Dim memory As New MemoryStream()
Dim startIndex As Long = 0
Const ChunkSize As Integer = 256
While True
Dim buffer As Byte() = New Byte(ChunkSize - 1) {}
Dim retrievedBytes As Long = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize)
memory.Write(buffer, 0, CInt(retrievedBytes))
startIndex += retrievedBytes
If retrievedBytes <> ChunkSize Then
Exit While
End If
End While
connection.Close()
Dim data As Byte() = memory.ToArray()
memory.Dispose()
Return data
End Function
Private Sub SaveAsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveAsToolStripMenuItem.Click
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "PCF File|*.pcf|"
saveFileDialog1.Title = "Save an pcf File"
saveFileDialog1.ShowDialog()
If saveFileDialog1.FileName <> "" Then
Dim fs As System.IO.FileStream = CType(RetrieveFile("FakePCF.pcf"), System.IO.FileStream)
fs.Close()
End If
End Sub
Les fichiers sont enregistrés en tant que "SqlDbType.VarBinary" dans la base de données. Je reçois: "Index était en dehors des limites de la matrice." sur:
Dim retrievedBytes As Long = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize)
Le MemoryStream semble ne pas récupérer les données mais la syntaxe SQL est correcte. Qu'est-ce que je fais de mal?
Vous devez nous indiquer les erreurs que vous rencontrez lorsque vous essayez d'exécuter ce code. – BoltClock