我正在尝试访问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,Fileaccess.Read));
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
try
{
cmd.Transaction.Rollback();
}
catch (Exception ex2)
{
Response.Write(ex.Message + ex2.Message);
}
}
}
}
}