C# 如何创建包含内容的不存在文件,然后将其保存为数据库中的二进制文件?

C# 如何创建包含内容的不存在文件,然后将其保存为数据库中的二进制文件?,c#,file,byte,attachment,filestream,C#,File,Byte,Attachment,Filestream,所以我有一个数据库,它有一个附件表,里面有一个二进制列,存储实际的文件 我想在我的代码中生成一个文件,将内容添加到此文件,并将其作为二进制数据保存到数据库中,而不保存物理文件。 所以我有这个代码 var fileString = "Some random file content string"; var bytes = Encoding.UTF8.GetBytes(fileString); var stream = new MemoryStream(bytes); 这将创建文件内容的二进制文

所以我有一个数据库,它有一个附件表,里面有一个二进制列,存储实际的文件
我想在我的代码中生成一个文件,将内容添加到此文件,并将其作为二进制数据保存到数据库中,而不保存物理文件。 所以我有这个代码

var fileString = "Some random file content string";
var bytes = Encoding.UTF8.GetBytes(fileString);
var stream = new MemoryStream(bytes);
这将创建文件内容的二进制文件,但是当我来保存文件时,它是一个*.bin文件,因为没有代码说明它是什么类型的文件
如何用一个文件包装字符串的内容,然后将其保存为二进制文件?

请不要建议替代方案,我知道这不是最好的方法,但我使用的这个系统有极大的局限性。
谢谢

您可以这样尝试:

var fileString = "Some random file content string";
var bytes = Encoding.UTF8.GetBytes(fileString);
File.WriteAllBytes(pathToFile, bytes);

必须将文件数据(如字节数组)传递给sql参数值

你所要做的就是 创建DbCommand后继命令(如用于MS SQL server的SqlCommand) 添加命令文本,如“插入附件(attachid,content)值(@aid,@c)” 创建参数实例

var p = command.CreateParameter();
p.ParameterName = "@c";
p.Value = bytes;
p.SqlDbType = SqlDbType.Binary;
command.Parameters.Add(p);
(所有其他参数相同) 然后执行command.execonquery();
这将把字符串值作为字节数组放入数据库中的数据表附件。

描述相当混乱。要保存到数据库吗?然后,您可以将生成的
字节直接保存到数据库中。为什么要使用
MemoryStream
?我有一些通用代码,它需要内存蒸汽才能将文件实际保存到数据库中。这并不理想,但我必须使用它。您可以使用它转换为
字节数组,然后将其存储到数据库中。这不是我遇到的问题。我只需要将内容保存为文件。当我来下载这个文件的时候,它是一个二进制文件。我需要用我自己的文件名和extensiondatabase binary字段保存内容,它只接受二进制数据。没有文件名。如果您想存储文件名、外部长度等,您应该有其他列来存储这些内容。(我仍然不理解你的问题)但这将创建一个物理文件,我只需要将文件转换为二进制文件的结果二进制数据。我不能有一个物理文件。嘿,谢谢,但在与“bansi”交谈后,我意识到文件名没有与二进制数据一起传递。我没能把它分开处理。不过,谢谢你的评论,这对其他人可能还是有用的:)@Ben你可以使用一些分隔符将文件名保存在与文件内容相同的位置。或者,您可以在流的开头保存文件名长度,然后将文件名保存到流,然后-保存文件内容。但是,每次获取文件内容时,都必须读取长度并删除文件名。或者您可以压缩原始文件(zip存档可以包含原始文件名)并将zip保存到DB。但最好的方法是在保存文件数据的同一个表中为文件名设置单独的列。