如题,怎么改才能把链库的代码写在循环外边呢? private void toolStripButton1_Click(object sender, EventArgs e)
        {
            treeList1.CloseEditor();
            DataTable dt = treeList1.DataSource as DataTable;            foreach (DataRow row in dt.Rows)
            {
                foreach (DataColumn col in dt.Columns)
                {
                    if (col.Caption.ToLower() == "id" || col.Caption.ToLower() == "loginname" || col.Caption.ToLower() == "mc")
                        continue;
                    
                    update(row["id"].ToString(),col.Caption,Convert.ToBoolean(row[col.Caption]));
                }
            }
        }
        
        private void update(string id,string fName,bool val)
        {
            List<SqlParameter> paraList = new List<SqlParameter>();
            paraList.Add(new SqlParameter("@val", SqlDbType.Bit) { Value = val });
            StringBuilder strSql = new StringBuilder();
            strSql.AppendFormat("update QX set {0}={1} where id = {2}",fName,Convert.ToInt32( val),id);            SqlConnection conn = DBConnection.StringConnection();
            conn.Open();
            SqlCommand cmd = new SqlCommand(strSql.ToString(), conn);
            cmd.Parameters.AddRange(paraList.ToArray());
            int i = (int)cmd.ExecuteNonQuery();
            DBConnection.StringConnection().Close();
        }

解决方案 »

  1.   

    建议楼主研究一下第三方的数据访问组件,一些优秀的ORM中都有。
    或者自己写一个。
      

  2.   

     DBConnection.StringConnection();
    连接的代码已经在DBConnection这个class里了
    你检查下这个连字符串是否正确
    另外
    DBConnection.StringConnection().Close();
    最好改为了conn.Close();
      

  3.   

    我只是想把这个连库的语句,写在foreach循环外边,这样就不至于每便利一个单元格就打开一次库了,应该就不会报超时的错误了。
      

  4.   

    把connection定义在foreach的外面
    private void toolStripButton1_Click(object sender, EventArgs e)
      {
      treeList1.CloseEditor();
      DataTable dt = treeList1.DataSource as DataTable;  try
      {
        SqlConnection conn = DBConnection.StringConnection();
      conn.Open();      foreach (DataRow row in dt.Rows)
          {
              foreach (DataColumn col in dt.Columns)
              {
                  if (col.Caption.ToLower() == "id" || col.Caption.ToLower() == "loginname" || col.Caption.ToLower() == "mc")
                  continue;
                   
                  update(row["id"].ToString(),col.Caption,Convert.ToBoolean(row[col.Caption]), conn);
              }
          }
       }
       finally
       {
           if (conn != null)
           {
              DBConnection.StringConnection().Close();
           }
       }
      }
      
       
      private void update(string id,string fName,bool val, SqlConnection conn)
      {
      List<SqlParameter> paraList = new List<SqlParameter>();
      paraList.Add(new SqlParameter("@val", SqlDbType.Bit) { Value = val });
      StringBuilder strSql = new StringBuilder();
      strSql.AppendFormat("update QX set {0}={1} where id = {2}",fName,Convert.ToInt32( val),id);  SqlCommand cmd = new SqlCommand(strSql.ToString(), conn);
      cmd.Parameters.AddRange(paraList.ToArray());
      int i = (int)cmd.ExecuteNonQuery();
      
      }
      

  5.   

    vsts2010你的方法好用,谢谢,放分了。