日期:2014-05-17  浏览次数:20450 次

关于列“XX”不属于table“XX”的问题
private static SqlConnection connection;

  public static SqlConnection Connection
  {
  get
  {  
  string connectionString = WebConfigurationManager.AppSettings["ConnectionString_db_Xinli_PX"];
   
  if (connection == null)
  {
  connection = new SqlConnection(connectionString);
  connection.Open();
  }
  else if (connection.State == System.Data.ConnectionState.Closed)
  {
  connection = new SqlConnection(connectionString);
  connection.Open();
  }
  else if (connection.State == System.Data.ConnectionState.Broken)
  {
  connection = new SqlConnection(connectionString);
  connection.Close();
  connection.Open();
  }
  return connection;
  }




DB如上 最近压力测试 发现程序问题 列XX不属于表XX 这个问题只会在人很多的时候出现 找了很多方法 还没有解决 今天总结了下 请大家看看 是不是这样的问题


  这个DB适用了 全局静态变量 connection 那么在人多的时候 由于多人适用的同一个进程那么就有可能出现并发的问题 不同的操作使得 别的人正在用的 connection 关闭再打开 从而返回的datatable出现错误 而出现标题阐述的错误  
  解决方案: 去掉全局变量 每个connection都是用 new的方法 这样是否够优化 或者希望大家能集思广益给出更好的解决办法~ 问题比较紧急

------解决方案--------------------
不错,不能用static的静态变量,人多了,确实有问题。
------解决方案--------------------
ADO.NET自动管理Connection Pool,谁让你多事搞什么static Connection变量的?多线程并发冲突你没概念吗?

尤其是在ASP.NET应用中,除非你非常了解ASP.NET机制否则不要乱声明任何static对象,这个东西不是初学者玩儿的...
------解决方案--------------------
用连接池,避免多次开关DB连接,有损性能
------解决方案--------------------
并发的问题就用线程锁咯,或者用lock锁定也行,这样每个线程就排队啦,
------解决方案--------------------
全局变量少用为好。