Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlFileStream-在不生成空文件的情况下插入_C#_.net_Sql_Sql Server_Filestream - Fatal编程技术网

C# SqlFileStream-在不生成空文件的情况下插入

C# SqlFileStream-在不生成空文件的情况下插入,c#,.net,sql,sql-server,filestream,C#,.net,Sql,Sql Server,Filestream,我正在使用SqlFileStream将文件存储在数据库中,但是在插入新记录时,我遇到了一个似乎无法解决的小问题!问题在于,我需要在插入记录时创建一个临时文件,以提供将实际文件数据流传输到的文件路径。当实际数据流传输到文件路径时,我希望临时文件被覆盖,但实际上它添加了另一个文件-在文件系统中留下空文件 下面是代码(请忽略查询字符串格式和我插入参数的方式,我一直在尝试不同的东西,并失去了编写代码的意愿;): 请告诉我是否可以添加更多信息或更清楚地说明此问题。filestream系统使用垃圾收集器-每

我正在使用SqlFileStream将文件存储在数据库中,但是在插入新记录时,我遇到了一个似乎无法解决的小问题!问题在于,我需要在插入记录时创建一个临时文件,以提供将实际文件数据流传输到的文件路径。当实际数据流传输到文件路径时,我希望临时文件被覆盖,但实际上它添加了另一个文件-在文件系统中留下空文件

下面是代码(请忽略查询字符串格式和我插入参数的方式,我一直在尝试不同的东西,并失去了编写代码的意愿;):


请告诉我是否可以添加更多信息或更清楚地说明此问题。

filestream系统使用垃圾收集器-每次更改都会生成一个新文件,然后最终删除旧文件。但这不会立即发生


例如,请参阅或,以了解有关这背后机制的一些讨论。

filestream系统使用垃圾收集器-每次更改都会生成一个新文件,然后最终删除旧文件。但这不会立即发生。@Damien_不信者-你知道,我认为文件夹中似乎少了几个文件,这些文件来自我之前运行的一些测试(几个小时前),并且刚刚再次检查,似乎更多的文件消失了,所以看起来你是对的,先生(不是我怀疑你;))请发帖回答,我会接受的——谢谢你让我摆脱了痛苦
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();
        }