下面我将为你详细讲解“C#实现文件与二进制互转并存入数据库”的完整攻略。
1. 准备工作
首先,我们需要在C#中引入System.IO
和System.Data.SqlClient
命名空间,分别用于操作文件和数据库。
using System.IO;
using System.Data.SqlClient;
2. 将文件转换为二进制数据
接下来,我们需要将文件转换为二进制数据,使用FileStream
类读取文件,并将其转换为byte[]
类型的数据,具体代码如下:
byte[] fileData;
string filePath = "文件路径";
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
using (BinaryReader br = new BinaryReader(fs))
{
fileData = br.ReadBytes((int)fs.Length);
}
}
3. 将二进制数据转换为文件
如果需要从数据库中读取二进制数据并转换为文件,可以使用FileStream
类将二进制数据写入到文件中,具体代码如下:
byte[] fileData; //从数据库中读取到的二进制数据
string filePath = "存储文件路径";
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
bw.Write(fileData);
}
}
4. 将二进制数据存入数据库
将二进制文件存入数据库,我们需要使用SqlParameter
类的SqlDbType.VarBinary
类型来创建参数,具体代码如下:
byte[] fileData; //二进制文件数据
string connectionString = "数据库连接字符串";
string tableName = "表名";
string fileName = "文件名";
using (SqlConnection con = new SqlConnection(connectionString))
{
string sql = $"INSERT INTO {tableName} (FileName, FileData) VALUES (@FileName, @FileData)";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar).Value = fileName;
cmd.Parameters.Add("@FileData", SqlDbType.VarBinary).Value = fileData;
con.Open();
cmd.ExecuteNonQuery();
}
}
5. 从数据库中读取二进制数据
从数据库中读取二进制数据,我们需要使用SqlDataReader
类读取结果集,并将二进制数据转换为byte[]
类型的数据,具体代码如下:
byte[] fileData; //从数据库中读取到的二进制数据
string connectionString = "数据库连接字符串";
string tableName = "表名";
string fileName = "文件名";
using (SqlConnection con = new SqlConnection(connectionString))
{
string sql = $"SELECT FileData FROM {tableName} WHERE FileName = @FileName";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar).Value = fileName;
con.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
fileData = (byte[])reader["FileData"];
}
}
}
}
示例1:将本地的test.txt文本文件转为二进制数据后存入数据库
string filePath = "本地文件路径";
byte[] fileData;
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
using (BinaryReader br = new BinaryReader(fs))
{
fileData = br.ReadBytes((int)fs.Length);
}
}
string connectionString = "数据库连接字符串";
string tableName = "表名";
string fileName = "test.txt";
using (SqlConnection con = new SqlConnection(connectionString))
{
string sql = $"INSERT INTO {tableName} (FileName, FileData) VALUES (@FileName, @FileData)";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar).Value = fileName;
cmd.Parameters.Add("@FileData", SqlDbType.VarBinary).Value = fileData;
con.Open();
cmd.ExecuteNonQuery();
}
}
示例2:从数据库中读取test.txt文件的二进制数据并将其转换为本地的test_copy.txt文件
byte[] fileData;
string connectionString = "数据库连接字符串";
string tableName = "表名";
string fileName = "test.txt";
string filePath = "本地存储文件路径";
using (SqlConnection con = new SqlConnection(connectionString))
{
string sql = $"SELECT FileData FROM {tableName} WHERE FileName = @FileName";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar).Value = fileName;
con.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
fileData = (byte[])reader["FileData"];
}
}
}
}
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
bw.Write(fileData);
}
}
以上就是“C#实现文件与二进制互转并存入数据库”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现文件与二进制互转并存入数据库 - Python技术站