C#在SqlServer中保存文件

上传者: xiaojie449 | 上传时间: 2026-03-09 15:11:11 | 文件大小: 33KB | 文件类型: ZIP
在.NET开发环境中,C#是一种常用的编程语言,而SQL Server是一款强大的关系型数据库管理系统。将文件存储在数据库中,特别是SQL Server中,可以方便地进行数据管理、备份和恢复,同时便于实现文件的安全访问和权限控制。本篇将详细介绍如何在C#中利用SQL Server来保存文件。 我们需要了解SQL Server中的BLOB(Binary Large Object)类型,如VARBINARY(MAX)或IMAGE,它们用于存储大对象,如图片、文档等。在创建数据库表时,我们通常会为文件数据创建一个BLOB字段。 ```sql CREATE TABLE Files ( Id INT PRIMARY KEY IDENTITY, FileName NVARCHAR(255), ContentType NVARCHAR(50), FileData VARBINARY(MAX) ); ``` 接下来,我们将讨论在C#中如何操作这些步骤: 1. **连接数据库**:使用`SqlConnection`类建立与SQL Server的连接。记得提供正确的服务器名、数据库名、用户名和密码。 ```csharp string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; SqlConnection connection = new SqlConnection(connectionString); connection.Open(); ``` 2. **上传文件**:读取本地文件内容并将其转换为字节数组,然后使用`SqlCommand`执行INSERT语句将文件数据存入数据库。 ```csharp string filePath = @"C:\path\to\file.txt"; FileStream fileStream = new FileStream(filePath, FileMode.Open); byte[] fileBytes = new byte[fileStream.Length]; fileStream.Read(fileBytes, 0, (int)fileStream.Length); string query = "INSERT INTO Files (FileName, ContentType, FileData) VALUES (@FileName, @ContentType, @FileData)"; SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@FileName", Path.GetFileName(filePath)); command.Parameters.AddWithValue("@ContentType", MimeMapping.GetMimeMapping(filePath)); command.Parameters.AddWithValue("@FileData", fileBytes); command.ExecuteNonQuery(); ``` 3. **下载文件**:从数据库中检索文件数据,写入到本地文件系统。 ```csharp string downloadFilePath = @"C:\path\to\downloaded\file.txt"; SqlCommand selectCommand = new SqlCommand("SELECT FileData FROM Files WHERE Id = @Id", connection); selectCommand.Parameters.AddWithValue("@Id", fileId); SqlDataReader reader = selectCommand.ExecuteReader(); if (reader.Read()) { using (MemoryStream memoryStream = new MemoryStream((byte[])reader["FileData"])) { using (FileStream outputFile = new FileStream(downloadFilePath, FileMode.Create)) { memoryStream.CopyTo(outputFile); } } } reader.Close(); ``` 4. **删除文件**:从数据库中删除文件记录。 ```csharp string deleteQuery = "DELETE FROM Files WHERE Id = @Id"; SqlCommand deleteCommand = new SqlCommand(deleteQuery, connection); deleteCommand.Parameters.AddWithValue("@Id", fileId); deleteCommand.ExecuteNonQuery(); ``` 5. **安全性和性能优化**:为了提高安全性,应使用参数化查询避免SQL注入攻击。另外,对于大数据量的文件,可以考虑使用`SqlBulkCopy`类批量插入数据,以提高性能。 6. **事务处理**:在多步骤操作(如上传、下载或删除)时,可以使用`SqlTransaction`确保操作的原子性,即要么全部成功,要么全部失败。 C#与SQL Server结合,可以方便地实现文件的存储和管理。通过理解BLOB类型、数据库操作以及C#的文件流处理,开发者能够构建出高效、安全的文件存储系统。在实际应用中,还需考虑性能优化、权限控制、错误处理等方面,以满足不同项目的需求。

文件下载

资源详情

[{"title":"( 22 个子文件 33KB ) C#在SqlServer中保存文件","children":[{"title":"C#在SqlServer中保存文件","children":[{"title":"WindowsFormsApplication1","children":[{"title":"WindowsFormsApplication1","children":[{"title":"Form1.Designer.cs <span style='color:#111;'> 2.73KB </span>","children":null,"spread":false},{"title":"Form1.cs <span style='color:#111;'> 3.84KB </span>","children":null,"spread":false},{"title":"obj","children":[{"title":"x86","children":[{"title":"Debug","children":[{"title":"DesignTimeResolveAssemblyReferencesInput.cache <span style='color:#111;'> 6.30KB </span>","children":null,"spread":false},{"title":"TempPE","children":[{"title":"Properties.Resources.Designer.cs.dll <span style='color:#111;'> 4.50KB </span>","children":null,"spread":false}],"spread":true},{"title":"WindowsFormsApplication1.csproj.FileListAbsolute.txt <span style='color:#111;'> 162B </span>","children":null,"spread":false},{"title":"DesignTimeResolveAssemblyReferences.cache <span style='color:#111;'> 3.08KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true},{"title":"app.config <span style='color:#111;'> 144B </span>","children":null,"spread":false},{"title":"bin","children":[{"title":"Debug","children":[{"title":"WindowsFormsApplication1.vshost.exe <span style='color:#111;'> 11.33KB </span>","children":null,"spread":false},{"title":"WindowsFormsApplication1.vshost.exe.config <span style='color:#111;'> 144B </span>","children":null,"spread":false},{"title":"WindowsFormsApplication1.vshost.exe.manifest <span style='color:#111;'> 490B </span>","children":null,"spread":false},{"title":"WindowsFormsApplication1.exe.config <span style='color:#111;'> 144B </span>","children":null,"spread":false}],"spread":true}],"spread":true},{"title":"Properties","children":[{"title":"Resources.Designer.cs <span style='color:#111;'> 2.82KB </span>","children":null,"spread":false},{"title":"Settings.Designer.cs <span style='color:#111;'> 1.10KB </span>","children":null,"spread":false},{"title":"Settings.settings <span style='color:#111;'> 249B </span>","children":null,"spread":false},{"title":"AssemblyInfo.cs <span style='color:#111;'> 1.35KB </span>","children":null,"spread":false},{"title":"Resources.resx <span style='color:#111;'> 5.48KB </span>","children":null,"spread":false}],"spread":true},{"title":"Program.cs <span style='color:#111;'> 505B </span>","children":null,"spread":false},{"title":"SQLBaseLocal.cs <span style='color:#111;'> 2.42KB </span>","children":null,"spread":false},{"title":"WindowsFormsApplication1.csproj <span style='color:#111;'> 3.73KB </span>","children":null,"spread":false},{"title":"Form1.resx <span style='color:#111;'> 5.68KB </span>","children":null,"spread":false}],"spread":true},{"title":"WindowsFormsApplication1.sln <span style='color:#111;'> 914B </span>","children":null,"spread":false},{"title":"WindowsFormsApplication1.suo <span style='color:#111;'> 19.50KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}]

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明