gavinv Ответов: 3

С этим соединением уже связан открытый DataReader, который должен быть закрыт первым


Когда я запускаю свой проект MVC(C#,use entity Framework+MySql), он показывает, что:с этим соединением уже связан открытый DataReader, который должен быть закрыт первым. И код ошибки:
[assembly: EdmRelationshipAttribute("blogModel", "cid", "cls", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(blog.Models.cls), "news", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(blog.Models.news), true)] [assembly: EdmRelationshipAttribute("blogModel", "uid", "users", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(blog.Models.users), "news", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(blog.Models.news), true)]
[XmlIgnoreAttribute()]     [SoapIgnoreAttribute()]     [DataMemberAttribute()]     [EdmRelationshipNavigationPropertyAttribute("blogModel", "cid", "cls")]     public cls cls     {         get         {             return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<cls>("blogModel.cid", "cls").Value;         }         set         {             ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<cls>("blogModel.cid", "cls").Value = value;         }     }     /// <summary>     /// 没有元数据文档可用。     /// </summary>     [BrowsableAttribute(false)]     [DataMemberAttribute()]     public EntityReference<cls> clsReference     {         get         {             return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<cls>("blogModel.cid", "cls");         }         set         {             if ((value != null))             {                 ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<cls>("blogModel.cid", "cls", value);             }         }     }      /// <summary>     /// 没有元数据文档可用。     /// </summary>     [XmlIgnoreAttribute()]     [SoapIgnoreAttribute()]     [DataMemberAttribute()]     [EdmRelationshipNavigationPropertyAttribute("blogModel", "uid", "users")]     public users users     {         get         {             return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<users>("blogModel.uid", "users").Value;         }         set         {             ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<users>("blogModel.uid", "users").Value = value;         }     }     /// <summary>     /// 没有元数据文档可用。     /// </summary>     [BrowsableAttribute(false)]     [DataMemberAttribute()]     public EntityReference<users> usersReference     {         get         {             return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<users>("blogModel.uid", "users");         }         set         {             if ((value != null))             {                 ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<users>("blogModel.uid", "users", value);             }         }     }      #endregion 

Этот код находится в файле модели ХХ.Дизайнер.CS я хочу знать, как прекратить GetRelateReference или закрытия объекта DataReader, нет DataReader в ХХ.Дизайнер.КС. и, когда я добавить значение multipleactiveresultsets=true в строке подключения в web.конфиг, попробую еще раз, покажи мне: формат строки инициализации не соответствует спецификации, как я могу исправить эту проблему?
/// 请使用应用程序配置文件的“blogEntities”部分中的连接字符串初始化新 blogEntities 对象。     ///      public blogEntities() : base("name=blogEntities", "blogEntities")     {         this.ContextOptions.LazyLoadingEnabled = true;         OnContextCreated();     }      /// <summary>     /// 初始化新的 blogEntities 对象。     /// </summary>     public blogEntities(string connectionString) : base(connectionString, "blogEntities")     {         this.ContextOptions.LazyLoadingEnabled = true;         OnContextCreated();     }      /// <summary>     /// 初始化新的 blogEntities 对象。     /// </summary>     public blogEntities(EntityConnection connection) : base(connection, "blogEntities")     {         this.ContextOptions.LazyLoadingEnabled = true;         OnContextCreated();     }      #endregion <pre lang="c#">

3 Ответов

Рейтинг:
2

Arjun YK

Ошибка говорит о том, что datareader находится в открытом состоянии еще где-то. сначала закройте datareader и откройте его, когда вы захотите использовать его снова. Это simlar к объекту соединения.
что-то вроде этого

//some function
connectionobject.open()
//do some code
sqldatareader dr = cmd.executereader();
dr.open();
//do some code
dr.close();
//some function2
 connectioobject.open();
//do some code
sqldatareader dr1 = cmd.executereader();
dr1.open();
//do some code
dr1.close();


Это должно решить вашу проблему


gavinv

thanx, но я начинающий в MVC, так что вы должны опубликовать для меня извлеченный код? так как в файле Designer.cs нет SQLDATAREADER.

Arjun YK

Если вы можете прислать мне СЕ может быть я постараюсь решить эту проблему

gavinv

thanx, может быть, я пошлю вам код позже, теперь я получу какой-то код, может быть,смогу решить эту проблему, но в последней строке я могу найти, что это такое, вы объясните это или соберете его мне?
public static void RemoveAllRelatedObjects (EntityObject entity)
{

if (entity = = null)
{ возврат;
}

var relationshipManager = ((ientitywithrelationships) сущность).RelationshipManager;

if (relationshipManager == null)
{ возврат;

}

foreach (var re в relationshipManager.GetAllRelatedEnds())

{
ВАР перечислитель = ре.Метод getenumerator();

if (перечислитель = = null)
{

продолжить;
}

var allObject = новый список();
в то время как (перечислитель.метод MoveNext())
{
allobject.Add((IEntityWithRelationships)перечислитель.Текущий);

}
foreach(var v в allObject)
{

заново.Удалить(в);
}

MiRelatedEndSetIsLoad.Invoke(re, new object[] {false});

}
}

Рейтинг:
0

Member 11589472

Цитата:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Threading;
using System.Net;
using System.IO;

namespace ConsoleApplication2
{

    class Program
    {
        static void Main(string[] args)
        {
            Thread t1 = new Thread(Program.Go);

            //Thread t1 = new Thread(() => Go());

            t1.Start(); // Run Go() on the new thread.
           
           
        }// Simultaneously run Go() in the main thread. 

      

        public static void Go() // public static void Go()
        {
            try
            {

                string ConnectionString = "Server=localhost; Database=XXX; Uid=root; Pwd=XXXX12;";
            
               
                using (MySqlConnection conn = new MySqlConnection(ConnectionString))
                {

                    conn.Open();

                    using (MySqlCommand cmd = new MySqlCommand("select iSno,vcMsisdn,vcMessage from smsmt where iStatus=0;", conn))
                    {
                        MySqlDataReader reader = cmd.ExecuteReader();

                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                               

                                string url = "iSno=" + reader["iSno"].ToString() + "&from=" + reader["vcMsisdn"].ToString() + "&msg=" + reader["vcMessage"].ToString();

                                Console.WriteLine(url);

                                
                                //string res = Program.HttpWebResponseInfo(url);
                                

                                MySqlCommand  cmd1 = new MySqlCommand("UPDATE smsmt set iStatus=1 where iSno="+reader["iSno"],conn) ;

                                int rows = cmd1.ExecuteNonQuery();

                                Console.WriteLine("Record Updated Successfully");
                                Console.ReadLine();
                        
                                    }
                              reader.Close();
                            

                            }
                       
                        }
                        
                      
                    }
                                   }
               
            
            catch (Exception ex)
            {
                //Log exception
                //Display Error message
            }
            
        }


    }
}














ошибка:----------
Цитата:
С этим соединением уже связан открытый DataReader, который должен быть закрыт первым