在SqlDataReader返回太多记录时创建新的SqlFileStream对象时出错

我正在尝试访问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);
                        }
                    }
                }
            }
        }
lanjiong 回答:在SqlDataReader返回太多记录时创建新的SqlFileStream对象时出错

我通过首先选择所需文件的所有主键并将它们添加到集合中来解决此问题。然后,我只是简单地使用循环来逐个检索文件。

本文链接:https://www.f2er.com/3156424.html

大家都在问