我有一个应用程序,我将文件字节分块并将每个块存储在数据库中(我正在记录每个块的信息)。然后,我尝试从数据库中检索这些块,将它们重新放在 C# 中并写入文件。
目前,我有以下 C# 代码:
string encoded = GetBase64EncodedFile(); // This is just for readability
byte[] fileBytes = Convert.FromBase64String(encoded).ToList().ToArray();
Database database = DatabaseFactory.CreateDatabase();
using (DbCommand command = database.GetStoredProcCommand("SaveFileChunk"))
{
database.AddInParameter(command, "fileName", DbType.String, fileName);
database.AddInParameter(command, "offset", DbType.Int32, offset);
database.AddInParameter(command, "number", DbType.Int32, number);
database.AddInParameter(command, "chunkBytes", DbType.Binary, fileBytes);
database.ExecuteNonQuery(command);
}
此时,如果我打印出 fileBytes.Count(),我看到:152754
记录被写入具有以下结构的 SQL Azure 表:
FileChunk
---------
Filename nvarchar(max)
Offset int
Number int
ChunkBytes varbinary(max)
后来,我尝试使用以下查询接收文件块:
SELECT * FROM [FileChunk] ORDER BY [Number]
然后我尝试填充我的 FileChunk CLR 对象,如下所示:
public FileChunk(IDataReader reader)
{
fileName = reader["Filename"].ToString();
offset = Convert.ToInt32(reader["Offset"].ToString());
number = Convert.ToInt32(reader["Number"].ToString());
chunkBytes = reader["ChunkBytes"].ToString().ToCharArray().Select(c => (byte)c).ToArray();
}
当我执行这段代码时,我了解到上面的 chunkBytes.Count() 是 13。
这意味着我有某种序列化或数据类型转换错误。但是,我没有看到。我该如何 a) 将字节放入 SQL Azure b) 将它们取出
谢谢