Winforms 在Windows窗体VB EF中将文件夹中的文件保存到SQL数据库

Winforms 在Windows窗体VB EF中将文件夹中的文件保存到SQL数据库,winforms,entity-framework-4,vb.net-2010,Winforms,Entity Framework 4,Vb.net 2010,我真的很挣扎,任何帮助都将不胜感激 我需要一点代码,通过文件夹中的每个文件,并将其保存到数据库中,以便以后可以将其拉出并显示。我还没有到显示部分,哈哈,仍在试图获取数据库中的文件 到目前为止,我得到的是一个错误 Value of type '1-dimensional array of Byte' cannot be converted to 'String'. 数据库中的所有字段都是nvarchar(MAX) 也许我做错了 非常感谢你的帮助 --编辑 这似乎可以做到 For Eac

我真的很挣扎,任何帮助都将不胜感激

我需要一点代码,通过文件夹中的每个文件,并将其保存到数据库中,以便以后可以将其拉出并显示。我还没有到显示部分,哈哈,仍在试图获取数据库中的文件

到目前为止,我得到的是一个错误

Value of type '1-dimensional array of Byte' cannot be converted to 'String'.
数据库中的所有字段都是
nvarchar(MAX)

也许我做错了

非常感谢你的帮助

--编辑

这似乎可以做到

     For Each f As System.IO.FileInfo In dir.GetFiles("*.*")
        Using db As New FileStoreAppDBEntities
            Dim NewFile As New StoredFile
            NewFile.FileName = f.Name
            NewFile.FileSize = f.Length
            Dim filename As String = f.FullName
            NewFile.FileContent = System.IO.File.ReadAllBytes(filename)
            NewFile.FileType = f.Extension.ToLower
            db.StoredFiles.AddObject(NewFile)
            db.SaveChanges()
        End Using
     Next
 For Each f As System.IO.FileInfo In dir.GetFiles("*.*")
    Using db As New FileStoreAppDBEntities
        Dim NewFile As New StoredFile
        NewFile.FileName = f.Name
        NewFile.FileSize = f.Length
        Dim filename As String = f.FullName
        NewFile.FileContent = System.IO.File.ReadAllBytes(filename)
        NewFile.FileType = f.Extension.ToLower
        db.StoredFiles.AddObject(NewFile)
        db.SaveChanges()
    End Using
 Next
虽然不确定性能,但我认为这可能会将文件放入内存,然后发送它而不是流式传输

要检索该文件,请执行以下操作:

    Using db As New FileStoreAppDBEntities
        Dim IDofFile As Integer = 31
        Dim getFile = (From files In db.StoredFiles Where files.FileID = IDofFile Select files).SingleOrDefault
        'getFile.FileName eg. mydocument.txt
        System.IO.File.WriteAllBytes("C:\LocationToSaveTo\" & getFile.FileName, getFile.FileContent)
    End Using
Using db As New FileStoreAppDBEntities
    Dim IDofFile As Integer = 31
    Dim getFile = (From files In db.StoredFiles Where files.FileID = IDofFile Select files).SingleOrDefault
    'getFile.FileName eg. mydocument.txt
    System.IO.File.WriteAllBytes("C:\LocationToSaveTo\" & getFile.FileName, getFile.FileContent)
End Using
获取非常大文件的错误
System.OutOfMemoryException
不过,对于较小的文件来说,它工作得非常完美


也许可以将文件分块?

您的文件是文本文件吗?如果是这样,则不应将其作为二进制数据读取,而应作为文本数据读取。类似这样的内容(很抱歉,它是C#,但应该很容易转换为VB.NET):

如果文件是二进制文件,那么您不希望将它们作为字符串存储在数据库中,而可能是作为varbinary存储

这似乎可以做到

     For Each f As System.IO.FileInfo In dir.GetFiles("*.*")
        Using db As New FileStoreAppDBEntities
            Dim NewFile As New StoredFile
            NewFile.FileName = f.Name
            NewFile.FileSize = f.Length
            Dim filename As String = f.FullName
            NewFile.FileContent = System.IO.File.ReadAllBytes(filename)
            NewFile.FileType = f.Extension.ToLower
            db.StoredFiles.AddObject(NewFile)
            db.SaveChanges()
        End Using
     Next
 For Each f As System.IO.FileInfo In dir.GetFiles("*.*")
    Using db As New FileStoreAppDBEntities
        Dim NewFile As New StoredFile
        NewFile.FileName = f.Name
        NewFile.FileSize = f.Length
        Dim filename As String = f.FullName
        NewFile.FileContent = System.IO.File.ReadAllBytes(filename)
        NewFile.FileType = f.Extension.ToLower
        db.StoredFiles.AddObject(NewFile)
        db.SaveChanges()
    End Using
 Next
虽然不确定性能,但我认为这可能会将文件放入内存,然后发送它而不是流式传输

要检索该文件,请执行以下操作:

    Using db As New FileStoreAppDBEntities
        Dim IDofFile As Integer = 31
        Dim getFile = (From files In db.StoredFiles Where files.FileID = IDofFile Select files).SingleOrDefault
        'getFile.FileName eg. mydocument.txt
        System.IO.File.WriteAllBytes("C:\LocationToSaveTo\" & getFile.FileName, getFile.FileContent)
    End Using
Using db As New FileStoreAppDBEntities
    Dim IDofFile As Integer = 31
    Dim getFile = (From files In db.StoredFiles Where files.FileID = IDofFile Select files).SingleOrDefault
    'getFile.FileName eg. mydocument.txt
    System.IO.File.WriteAllBytes("C:\LocationToSaveTo\" & getFile.FileName, getFile.FileContent)
End Using

对于非常大的文件System.OutOfMemoryException会出现错误。但是,对于较小的文件,该异常非常有效…

Hi@Pawel,我希望能够对任何文件执行此操作,但主要是图像、视频和文档。也许我用错误的方式来攻击它?谢谢你,你真的应该使用FILESTREAM数据类型(假设这是sql server)。EF不是执行此操作的工具:。