我使用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();
} 请让我知道,如果我可以补充更多的信息或更明确的问题。
发布于 2013-11-25 15:13:13
filestream系统使用垃圾收集器--每次更改都会生成一个新文件,然后最终删除旧文件。但这不是立即发生的。
例如,请参阅如何工作: FileStream垃圾收集或它是如何工作的:文件流文件的前后图像,以了解这背后的一些机制。
https://stackoverflow.com/questions/20196257
复制相似问题