如何使用ASP.Net在SQL Server中插入文件?

我正在开发一个使用ADO.NETentity framework连接到SQL Server 2008的ASP.NET应用程序(C#)。

此应用程序的用户可以从其本地硬盘驱动器中选择要插入SQL Server的图像。 我怎样才能做到这一点?

我知道如何将图像存储到SQL Server但我不知道如何将图像上传到服务器(使用FileUpload服务器控件?)。

谢谢!

要将上传的文件存储到SQL服务器,您可以查看我的这个答案:

如何在图像列中存储图片?

在此示例中, uploadInput是一个文件输入控件,您可以将其用作ASP.NET中的FileUpload控件。

对于在ASP.NET中使用文件上载控件, 这是一篇很好的MSDN文章 。

好吧,要上传到网络服务器,你只需要一个 。 在ASP.NET中,这应该在Request.Files集合中可用。

在SQL Server中,您将需要varbinary(max) (或旧版本中的image )。

将它们推入SQL Server之前的一个重要问题是:它们有多大? 如果它们不是很大,你可以将它们视为一个byte[] ; 只是从InputStream缓冲并发送。 这是一种将Stream缓冲到单个byte[]的相当通用的方法:

  byte[] buffer = new byte[1024]; int bytesRead; MemoryStream ms = new MemoryStream(); while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, bytesRead); } byte[] data = ms.ToArray(); 

对于大量文件(除非您使用的是SQL 2008文件流扩展,否则可能不属于数据库),您需要将其分块。 这是我用于分块的旧回复 (在SQL 2005之前) – 但它显示了整体想法。

您可以使用varbinary(MAX)列: http : //msdn.microsoft.com/en-us/library/ms188362.aspx

在Google上搜索得到了这个: http : //www.informit.com/articles/article.aspx? p = 398883&seqNum = 2

请注意,在他的示例中,他正在使用SQL Server 2005中的图像数据类型。正在逐步淘汰该类型以支持varbinary。 您还必须更改该代码以满足您的特定架构需求。

不确定entity framework,但这是你在vanilla ado.net中的方法