using (SqlConnection con = new SqlConnection(ConnectString))
            {
                try
                {
                    DataSet ds = new DataSet();
                    SqlCommand cmd=new SqlCommand (sql,con);
                    SqlDataReader dr = cmd.ExecuteReader();                    int nFields = dr.FieldCount;
                    lv.Clear();                    for (int i = 0; i < nFields ; i++)
                    {
                        lv.Columns.Add(dr.GetName(i), 100, HorizontalAlignment.Left);
                    }                    int nRow = 0;
                    while (dr.Read())
                    {
                        // Create an array of subitems for quick insertion
                        // The subitems will be all fields in the row except for 
                        // the first field
                        String[] subitems = new String[nFields];
                        for (int i = 0; i < nFields; i++)
                        {
                            subitems[i] = dr[i].ToString();
                        }                        // Insert a new item into the listview, and add the subitems at 
                        // the same time. The item will be the first field in the row
                        ListViewItem item = new ListViewItem(subitems, -1);
                        lv.Items.Add(item);
                        ++nRow;
                    }    
                }
                catch (SqlException ex)
                {
                    throw new Exception(ex.Message);
                }

解决方案 »

  1.   

    我目前能看出2个问题
    一个是SqlConnection 没有open
    在SqlDataReader dr = cmd.ExecuteReader();前要con.Open()
    另一个是SqlDataReader 没有Close();
    在while 外面要执行dr.Close();
      

  2.   

    using (SqlConnection con = new SqlConnection(ConnectString))
      {
      try
      {
       con.open();
      DataSet ds = new DataSet();
      SqlCommand cmd=new SqlCommand (sql,con);
      SqlDataReader dr = cmd.ExecuteReader();
      int nFields = dr.FieldCount;
      lv.Clear();
      for (int i = 0; i < nFields ; i++)
      {
      lv.Columns.Add(dr.GetName(i), 100, HorizontalAlignment.Left);
      }
      int nRow = 0;
     while (dr.Read())
      {
      for (int i = 0; i < nFields; i++)
      {
        String[] subitems = new String[nFields];
        subitems[i] = dr[i].ToString();
      }
      ListViewItem item = new ListViewItem(subitems, -1);
      lv.Items.Add(item);
      ++nRow;
      } 
      dr.Close();  
      }
      catch (SqlException ex)
      {
      throw new Exception(ex.Message);
      } 
     }
     
    F11单步调试
      

  3.   

    用 SqlDataAdapter Fill DataSet 或 DataTableListViewItem[] items = new ListViewItem[0];foreach (DataRow row in table.Rows)
    {
      ListViewItem item = new ListViewItem();
      item.Text = if(row[0] == null) ? "Null" : row[0].ToString();  for(int i = 1; i< row.ItemArray.Length; i++)
      {
         item.SubItems.Add(row[i].ToString());
      }
      Array.Resize(ref items, items.Length + 1);
      items.SetValue (item, items.Length - 1);
    }