当前位置: 代码网 > it编程>编程语言>Asp.net > C#实现文件读写到SQLite数据库

C#实现文件读写到SQLite数据库

2025年01月09日 Asp.net 我要评论
《文件读写到sqlite数据库的方法》博客中,介绍了文件读写到sqlite数据库的方法,例子使用的python语言,本文是使用 c# 将文件读写到 sqlite 数据库的几种方法的具体示例,如果有些概

《文件读写到sqlite数据库的方法》博客中,介绍了文件读写到sqlite数据库的方法,例子使用的python语言,本文是使用 c# 将文件读写到 sqlite 数据库的几种方法的具体示例,如果有些概念模糊可参考作者以前博客。

1. 使用 blob 存储文件

示例代码:

using system;
using system.data.sqlite;
using system.io;
 
class program
{
    static void main(string[] args)
    {
        string databasepath = "example.db";
        string connectionstring = $"data source={databasepath};version=3;";
 
        // 创建数据库和表
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string createtablequery = @"
                create table if not exists files (
                    id integer primary key autoincrement,
                    name text not null,
                    data blob not null
                );";
            using (var command = new sqlitecommand(createtablequery, connection))
            {
                command.executenonquery();
            }
        }
 
        // 插入文件到数据库
        string filepath = "example.pdf"; // 替换为你的文件路径
        insertfile(filepath, connectionstring);
 
        // 从数据库读取文件
        readfile(1, connectionstring); // 假设读取 id 为 1 的文件
    }
 
    static void insertfile(string filepath, string connectionstring)
    {
        byte[] filedata = file.readallbytes(filepath);
        string filename = path.getfilename(filepath);
 
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string insertquery = "insert into files (name, data) values (@name, @data)";
            using (var command = new sqlitecommand(insertquery, connection))
            {
                command.parameters.addwithvalue("@name", filename);
                command.parameters.addwithvalue("@data", filedata);
                command.executenonquery();
            }
        }
 
        console.writeline($"file '{filename}' has been saved to the database.");
    }
 
    static void readfile(int fileid, string connectionstring)
    {
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string selectquery = "select name, data from files where id = @id";
            using (var command = new sqlitecommand(selectquery, connection))
            {
                command.parameters.addwithvalue("@id", fileid);
                using (var reader = command.executereader())
                {
                    if (reader.read())
                    {
                        string filename = reader.getstring(0);
                        byte[] filedata = (byte[])reader["data"];
 
                        file.writeallbytes(filename, filedata);
                        console.writeline($"file '{filename}' has been restored from the database.");
                    }
                }
            }
        }
    }
}

2. 存储文件路径

示例代码:

using system;
using system.data.sqlite;
 
class program
{
    static void main(string[] args)
    {
        string databasepath = "example.db";
        string connectionstring = $"data source={databasepath};version=3;";
 
        // 创建数据库和表
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string createtablequery = @"
                create table if not exists filepaths (
                    id integer primary key autoincrement,
                    name text not null,
                    path text not null
                );";
            using (var command = new sqlitecommand(createtablequery, connection))
            {
                command.executenonquery();
            }
        }
 
        // 插入文件路径
        string filepath = "example.pdf"; // 替换为你的文件路径
        insertfilepath(filepath, connectionstring);
 
        // 从数据库读取文件路径
        getfilepath(1, connectionstring); // 假设读取 id 为 1 的文件路径
    }
 
    static void insertfilepath(string filepath, string connectionstring)
    {
        string filename = system.io.path.getfilename(filepath);
 
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string insertquery = "insert into filepaths (name, path) values (@name, @path)";
            using (var command = new sqlitecommand(insertquery, connection))
            {
                command.parameters.addwithvalue("@name", filename);
                command.parameters.addwithvalue("@path", filepath);
                command.executenonquery();
            }
        }
 
        console.writeline($"file path '{filepath}' has been saved to the database.");
    }
 
    static void getfilepath(int fileid, string connectionstring)
    {
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string selectquery = "select name, path from filepaths where id = @id";
            using (var command = new sqlitecommand(selectquery, connection))
            {
                command.parameters.addwithvalue("@id", fileid);
                using (var reader = command.executereader())
                {
                    if (reader.read())
                    {
                        string filename = reader.getstring(0);
                        string filepath = reader.getstring(1);
 
                        console.writeline($"file '{filename}' is located at '{filepath}'.");
                    }
                }
            }
        }
    }
}

3. 分块存储文件

示例代码:

using system;
using system.data.sqlite;
using system.io;
 
class program
{
    static void main(string[] args)
    {
        string databasepath = "example.db";
        string connectionstring = $"data source={databasepath};version=3;";
 
        // 创建数据库和表
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string createtablequery = @"
                create table if not exists filechunks (
                    id integer primary key autoincrement,
                    file_id integer not null,
                    chunk_index integer not null,
                    chunk_data blob not null
                );";
            using (var command = new sqlitecommand(createtablequery, connection))
            {
                command.executenonquery();
            }
        }
 
        // 插入文件分块
        string filepath = "example.pdf"; // 替换为你的文件路径
        insertfilechunks(filepath, 1, connectionstring); // 假设文件 id 为 1
 
        // 重新组装文件
        reassemblefile(1, "output.pdf", connectionstring); // 输出为 output.pdf
    }
 
    static void insertfilechunks(string filepath, int fileid, string connectionstring)
    {
        int chunksize = 1024 * 1024; // 每块大小为 1mb
        byte[] buffer = new byte[chunksize];
        int chunkindex = 0;
 
        using (var filestream = new filestream(filepath, filemode.open, fileaccess.read))
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string insertquery = "insert into filechunks (file_id, chunk_index, chunk_data) values (@file_id, @chunk_index, @chunk_data)";
            using (var command = new sqlitecommand(insertquery, connection))
            {
                int bytesread;
                while ((bytesread = filestream.read(buffer, 0, chunksize)) > 0)
                {
                    byte[] chunkdata = new byte[bytesread];
                    array.copy(buffer, chunkdata, bytesread);
 
                    command.parameters.clear();
                    command.parameters.addwithvalue("@file_id", fileid);
                    command.parameters.addwithvalue("@chunk_index", chunkindex++);
                    command.parameters.addwithvalue("@chunk_data", chunkdata);
                    command.executenonquery();
                }
            }
        }
 
        console.writeline($"file '{filepath}' has been stored in chunks.");
    }
 
    static void reassemblefile(int fileid, string outputpath, string connectionstring)
    {
        using (var connection = new sqliteconnection(connectionstring))
        {
            connection.open();
            string selectquery = "select chunk_data from filechunks where file_id = @file_id order by chunk_index";
            using (var command = new sqlitecommand(selectquery, connection))
            {
                command.parameters.addwithvalue("@file_id", fileid);
                using (var reader = command.executereader())
                using (var outputfile = new filestream(outputpath, filemode.create, fileaccess.write))
                {
                    while (reader.read())
                    {
                        byte[] chunkdata = (byte[])reader["chunk_data"];
                        outputfile.write(chunkdata, 0, chunkdata.length);
                    }
                }
            }
        }
 
        console.writeline($"file has been reassembled to '{outputpath}'.");
    }
}

以上就是c#实现文件读写到sqlite数据库的详细内容,更多关于c#文件读写到数据库的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com