Я пытаюсь получить доступ к нескольким файлам в таблице SqlServer FILESTREAM. Этот код работает, когда число файлов, возвращаемых SqlDataReader, относительно мало. Около 20 файлов. Однако, когда SqlDataReader возвращает несколько сотен записей, я впервые получаю эту ошибку, проходя цикл while: «Процесс не может получить доступ к указанному файлу, так как он был открыт в другой транзакции».
Ошибка происходит в этой строке:
sfsList.Add(fileNameText, new SqlFileStream(filePath, txContext, FileAccess.Read));
Есть идеи?
Сегмент кода ниже:
int ProjectID;
int.TryParse(Request.QueryString["ProjectID"], out ProjectID);
string filePath = null;
byte[] txContext = null;
string fileNameText = null;
Dictionary<string, SqlFileStream> sfsList = new Dictionary<string, SqlFileStream>();
using (SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ATRD"].ToString()))
{
cn.Open();
using (SqlTransaction trn = cn.BeginTransaction("GetAllDocsTran"))
{
SqlCommand cmd = new SqlCommand("GetAllDocs", cn, trn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ProjectID", ProjectID);
using (SqlDataReader reader = cmd.ExecuteReader())
{
try
{
while (reader.Read())
{
txContext = (reader["txContext"] as byte[]);
filePath = reader["filePath"].ToString();
fileNameText = reader["fileNameText"].ToString();
sfsList.Add(fileNameText, new SqlFileStream(filePath, txContext, FileAccess.Read));
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
try
{
cmd.Transaction.Rollback();
}
catch (Exception ex2)
{
Response.Write(ex.Message + ex2.Message);
}
}
}
}
}