日期:2014-05-18  浏览次数:20988 次

c#窗体 数据库操作失败,请问如何修改?谢谢!
private void button1_Click(object sender, EventArgs e)
  {
  string conStr = "Data Source=.;Initial Catalog=db;User ID=sa;Password=sa";
  SqlConnection Conn = new SqlConnection(conStr);
  Conn.Open();
  SqlCommand cmd = new SqlCommand("select id, chengshi from chengshi where hide is null", Conn);
  SqlDataReader Reader = cmd.ExecuteReader();

  string quyu;
  while (Reader.Read())
  {
  quyu = "select id, quyu from quyu where chengshi_id=" + Reader.GetInt32(0).ToString() + " and hide is null";
  SqlCommand cmd2 = new SqlCommand(quyu, Conn);
  SqlDataReader red2 = cmd2.ExecuteReader(); // 提示这段有问题
  while (red2.Read())
  {

  textBox1.Text = red2.GetInt32(0).ToString();
  Application.DoEvents();
  }
  }

  Conn.Close();  
  }

------解决方案--------------------
拆开分两步执行试下
C# code
private void button1_Click(object sender, EventArgs e)
{
    string conStr = "Data Source=.;Initial Catalog=db;User ID=sa;Password=sa";
    SqlConnection Conn = new SqlConnection(conStr);
    Conn.Open();

    var list = new List<int>();

    SqlCommand cmd = new SqlCommand("select id, chengshi from chengshi where hide is null", Conn);
    SqlDataReader Reader = cmd.ExecuteReader();
    while (Reader.Read())
    {
        list.Add(Reader.GetInt32(0));
    }
    Reader.Dispose();
    cmd.Dispose();

    foreach (var item in list)
    {
        var sql = "select id, quyu from quyu where chengshi_id=" + item.ToString() + " and hide is null";
        SqlCommand cmd2 = new SqlCommand(sql, Conn);
        SqlDataReader red2 = cmd2.ExecuteReader(); // 提示这段有问题
        while (red2.Read())
        {
            textBox1.Text = red2.GetInt32(0).ToString();
            Application.DoEvents();
        }
        red2.Dispose();
        cmd2.Dispose();
    }

    Conn.Close();
}

------解决方案--------------------
定义个类,代码也稍作修改
C# code
private void button1_Click(object sender, EventArgs e)
{
    string conStr = "Data Source=.;Initial Catalog=db;User ID=sa;Password=sa";
    SqlConnection Conn = new SqlConnection(conStr);
    Conn.Open();

    var list = new List<Tuple>();

    SqlCommand cmd = new SqlCommand("select id, chengshi from chengshi where hide is null", Conn);
    SqlDataReader Reader = cmd.ExecuteReader();
    while (Reader.Read())
    {
        var tuple = new Tuple { id = Reader.GetInt32(0), quyu = Reader.GetString(1) };
        list.Add(tuple);
    }
    Reader.Dispose();
    cmd.Dispose();

    foreach (var item in list)
    {
        var sql = "select id, quyu from quyu where chengshi_id=" + item.id.ToString() + " and hide is null";
        SqlCommand cmd2 = new SqlCommand(sql, Conn);
        SqlDataReader red2 = cmd2.ExecuteReader(); // 提示这段有问题
        while (red2.Read())
        {
            textBox1.Text = red2.GetInt32(0).ToString();
            Application.DoEvents();
        }
        red2.Dispose();
        cmd2.Dispose();
    }

    Conn.Close();
}

private class Tuple
{
    public int id;
    public string quyu;
}