public SqlDataReader ExecuteReader(string sqlCmd, params SqlParameter[] cmdParms)
        {
            try
            {
                this.Open();
                cmd = new SqlCommand(sqlCmd, cn);
                cmd.Parameters.AddRange(cmdParms);
                sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                //throw new Exception(ex.Message);
                LocalLog myLog = new LocalLog();
                myLog.LogMe("Exception=" + ex.Message + "卐sqlCmd=" + sqlCmd);
                myLog.Dispose();
            }
            finally
            {
                cmd.Dispose();
            }
            
            return sdr;
        }
 public override Entity GetByNumber(int key)
        {
            
            string Sql_GetById = @"select title,name,content,re from QuestionInfo 
                                          where Id = @Id and ParentNode = '0'";            using (SqlDataReader reader = ReadDb.ExecuteReader(Sql_GetById, new SqlParameter("@Id", key)))
            {
                if (reader.Read())
                {                    Entity entity = new Entity(reader);
                 
                    return entity;
                }
                return null;
            }
        }异常信息: 
    异常类型: ArgumentException 
    异常消息: 列“title”不属于表 Table。 参考网上资料发生问题原因是:
1.并发时取数据出了问题,导致数据超时。
2.由于并发出错,影响了连接池,需要重新启动,导致读不到数据。网上找到的解决办法:并发问题用线程锁 或者 lock锁。
                     对于并发数大的系统,要充分利用缓存机制和数据库连接池的机制。
                     否则,很容易出现数据库并发超标 或 读脏数据等情况。
                     而对于IIS,也容易出现连接数过大,内存占用超标等异常,
                     同时,要注意多并发对资源的竞争,恰当使用资源锁(lock)和数据库的读写锁(table lock row lock)我遇到的困难是:
资料是找到了不少,但是不知道这个方向是否正确,以及就是正确,我对并发了解不多,不知道代码从何处下手写,
如果哪位高手,对这方面了解的话,请多多指教,谢谢!!

解决方案 »

  1.   

    我还真没这么干过Entity entity = new Entity(reader);
    这样试试  entity.Title = reader("title");
        
      

  2.   

    跟正下 entity.Title = reader["title"];
      

  3.   


    其实Entity对象中构造函数里面取值方法是:Title1 = GetString("Title", reader);
            /// <summary>
            /// 得到字符型列的值
            /// </summary>
            /// <param name="colName"></param>
            /// <param name="reader"></param>
            /// <returns></returns>
            public string GetString(string colName, IDataReader reader)
            {
                if (reader[colName] == null || string.IsNullOrEmpty(reader[colName]))
                {
                    return string.Empty;
                }
                else
                {
                    return reader[colName].ToString();
                    
                }
            }
    跟你含义是差不多的额。。
      

  4.   

    Entity entity = new Entity();entity.Title = reader["title"];
    在看看数据库和表名
      

  5.   


    SQL放在数据库都可以执行OK的,这个真的不是‘数据库表名或字段不存在的原因’。
    我在提问的时候详细说明了:
    异常信息:  
      异常类型: ArgumentException  
      异常消息: 列“title”不属于表 Table。

    异常消息:有时候是列‘xxxxx’不属于表‘xxxx’,一会儿报这张表的,一会儿又报另外一张表,不是固定的。如果出现这样的错误,只要重新按F5刷新下,又好了。