如何使用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中的方法