c# sql 存储文件

C#中,可以使用SqlCommand类执行SQL语句来存储文件路径或内容到数据库。

在C#中,通过SQL Server存储文件通常涉及将文件作为二进制数据(BLOB)存储到数据库中的某个字段,以下是使用C#和SQL Server存储文件的详细步骤:

c# sql 存储文件

1、创建数据库表:首先需要在SQL Server中创建一个用于存储文件的表,该表应包含一个用于存储文件名或文件路径的字段、一个用于存储文件类型的字段以及一个用于存储文件内容的BLOB字段。

CREATE TABLE Files (Id INT PRIMARY KEY IDENTITY, FileName NVARCHAR(255), ContentType NVARCHAR(50), FileData VARBINARY(MAX));

2、连接数据库:在C#代码中,使用SqlConnection类建立与SQL Server的连接,需要提供正确的服务器名、数据库名、用户名和密码。

string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

SqlConnection connection = new SqlConnection(connectionString);

connection.Open();

3、读取文件并转换为字节数组:使用FileStream类读取本地文件内容,并将其转换为字节数组。

string filePath = @"C:pathtofile.txt";

FileStream fileStream = new FileStream(filePath, FileMode.Open);

c# sql 存储文件

byte[] fileBytes = new byte[fileStream.Length];

fileStream.Read(fileBytes, 0, (int)fileStream.Length);

4、插入文件数据到数据库:使用SqlCommand执行INSERT语句,将文件数据存入数据库。

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();

c# sql 存储文件

5、关闭连接:完成文件存储后,关闭数据库连接。

connection.Close();

示例代码

以下是一个完整的示例代码,展示了如何在C#中使用SQL Server存储文件:

using System;
using System.Data.SqlClient;
using System.IO;
namespace FileStorageExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
            string filePath = @"C:pathtofile.txt";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                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)";
                using (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();
                }
            }
        }
    }
}

FAQs

Q1: 如何从数据库中检索并保存文件?

A1: 从数据库中检索文件数据时,可以使用SELECT语句和SqlCommand对象来获取特定记录的文件数据,将获取到的字节数组写入到本地文件系统中的一个新文件中。

string downloadFilePath = @"C:pathtodownloadedfile.txt";
using (SqlCommand selectCommand = new SqlCommand("SELECT FileData FROM Files WHERE Id = @Id", connection))
{
    selectCommand.Parameters.AddWithValue("@Id", fileId);
    using (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);
            }
        }
    }
}

Q2: 如何更新或删除已存储的文件?

A2: 要更新已存储的文件,可以使用UPDATE语句和SqlCommand对象来修改特定记录的文件数据,要删除已存储的文件,可以使用DELETE语句和SqlCommand对象来删除特定记录,更新文件数据的代码如下:

string updateQuery = "UPDATE Files SET FileName = @FileName, ContentType = @ContentType, FileData = @FileData WHERE Id = @Id";
using (SqlCommand updateCommand = new SqlCommand(updateQuery, connection))
{
    updateCommand.Parameters.AddWithValue("@FileName", newFileName);
    updateCommand.Parameters.AddWithValue("@ContentType", newContentType);
    updateCommand.Parameters.AddWithValue("@FileData", newFileBytes);
    updateCommand.Parameters.AddWithValue("@Id", fileId);
    updateCommand.ExecuteNonQuery();
}

而删除文件的代码如下:

string deleteQuery = "DELETE FROM Files WHERE Id = @Id";
using (SqlCommand deleteCommand = new SqlCommand(deleteQuery, connection))
{
    deleteCommand.Parameters.AddWithValue("@Id", fileId);
    deleteCommand.ExecuteNonQuery();
}

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1595395.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希未希
上一篇2025-02-25 19:22
下一篇 2025-02-25 19:24

发表回复

您的电子邮箱地址不会被公开。必填项已用 * 标注

产品购买QQ咨询微信咨询SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入