【发布时间】:2013-11-25 15:01:32
【问题描述】:
我正在使用 SqlFileStream 将文件存储在数据库中,但是在插入似乎无法解决的新记录时出现了一个小问题!问题在于我需要在插入记录时创建一个临时文件以提供将实际文件数据流式传输到的文件路径。当实际数据流式传输到文件路径时,我期望临时文件被覆盖,但它实际上添加了另一个文件 - 将空文件留在文件系统中。
这是代码(请忽略查询字符串格式和我插入参数的方式,我一直在尝试不同的东西并且已经失去了编写代码的意愿;):
using (TransactionScope transactionScope = new TransactionScope())
{
string InsertTSql = "Insert Into Documents(file_name, file_type, category, uploaded_by, file_data) values('" + request.fileInfo.fileName + "', '" + request.fileInfo.fileType + "', '" + request.fileInfo.category + "', '" + request.fileInfo.uploadedBy + "',Cast('' As varbinary(Max))); Select file_data.PathName() As Path From Documents Where document_id = @@Identity";
SqlConnection dbConnection = new SqlConnection(@"Data Source=SAM\SQLEXPRESS;Initial Catalog=PIRS;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");//ConfigurationManager.ConnectionStrings["PIRSDBCon"].ToString()) )
var cmd = new SqlCommand(InsertTSql, dbConnection);
dbConnection.Open();
string filePath = (string)cmd.ExecuteScalar();
string GetTcTSql = "Select GET_FILESTREAM_TRANSACTION_CONTEXT() As TransactionContext";
cmd = new SqlCommand(GetTcTSql, dbConnection);
byte[] transactionContext =(byte[]) cmd.ExecuteScalar();
SqlFileStream sqlFileStream = new SqlFileStream(filePath, transactionContext, FileAccess.Write);
request.fileData.CopyTo(sqlFileStream);
sqlFileStream.Close();
transactionScope.Complete();
}
如果我可以添加更多信息或更清楚地说明问题,请告诉我。
【问题讨论】:
-
文件流系统使用垃圾收集器 - 每次更改总是生成一个新文件,然后最终删除旧文件。但这不会立即发生。
-
@Damien_The_Unbeliever - 你知道,我认为文件夹中的文件似乎少了一些我运行的早期测试(几个小时前)并且刚刚再次检查,似乎更多的文件消失了所以看来你是对的先生(不是我怀疑你;))请作为答案发布,我会接受 - 谢谢你让我摆脱痛苦
标签: c# .net sql sql-server filestream