public SqlFileStream GetStream(Guid streamedReportId, Guid orgReportId)
{
string tmpFileName = string.Empty;
using (var ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromHours(1)))
{
using (SqlConnection conn = GetConnection())
using (SqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = @"SELECT p.Person.PathName() AS path,
GET_FILESTREAM_TRANSACTION_CONTEXT() as txnToken
FROM [dbo].[Persons] p
WHERE p.Id = @Id";
cmd.Parameters.AddWithValue("@Id", personId);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
var path = reader.GetString(reader.GetOrdinal("path"));
byte[] txnToken = reader.GetSqlBinary(reader.GetOrdinal("txnToken")).Value;
Stream sqlFileStream = new SqlFileStream((string)path, txnToken, FileAccess.Read);
return sqlFileStream;
}
reader.Close();
}
}
ts.Complete();
}
return null;
}
我正在尝试在数据访问层中创建一个函数,该函数将返回一个SqlFileStream
. 该函数应该从业务逻辑层调用。SqlFileStream
包裹在几个TransactionScope
using 语句中。我读到如果早先调用返回,则不会执行TransactionScope
该方法。ts.Complete()
我怎么解决这个问题。请帮助提供替代解决方案。