各种缴费是根据工资乘以一个参数来计算出来的,我希望在更改了这些参数之后,按一个键,可以更新各个员工某些列的数值...看清楚...是各个员工!!!!!!        private void ziliao_Load(object sender, EventArgs e)//程序启动时显示所有参数
        {
            string sql2 = "select * from xjiaofei";
            SqlCommand cmd3 = new SqlCommand(sql2, conn);
            conn.Open();
            SqlDataReader dr3 = cmd3.ExecuteReader();
            while (dr3.Read())
            {
                xylgr.Text = dr3["养老个人缴费参数"].ToString();
                xyldw.Text = dr3["养老单位缴费参数"].ToString();
                xybgr.Text = dr3["医保个人缴费参数"].ToString();
                xybdw.Text = dr3["医保单位缴费参数"].ToString();
                xsygr.Text = dr3["失业个人缴费参数"].ToString();
                xsydw.Text = dr3["失业单位缴费参数"].ToString();
                xgs.Text = dr3["工伤参数"].ToString();
                xsybx.Text = dr3["生育保险参数"].ToString();
            }
            dr3.Close();
            conn.Close();
        }        private void button7_Click(object sender, EventArgs e)
        {
            string sql2 = "select gerenziliao.养老缴费工资,gerenziliao.医保缴费工资,gerenziliao.失业缴费工资 from gerenziliao";
            SqlCommand cmd4 = new SqlCommand(sql2, conn);
            conn.Open();
            SqlDataReader dr4 = cmd4.ExecuteReader();
            while (dr4.Read())
            {
                Double a = Math.Round(Convert.ToDouble(dr4["养老缴费工资"].ToString()) * Convert.ToDouble(xylgr.Text), 0);
                Double b = Math.Round(Convert.ToDouble(dr4["养老缴费工资"].ToString()) * Convert.ToDouble(xyldw.Text), 0);
                Double c = Math.Round(Convert.ToDouble(dr4["医保缴费工资"].ToString()) * Convert.ToDouble(xybgr.Text), 0);
                Double d = Math.Round(Convert.ToDouble(dr4["医保缴费工资"].ToString()) * Convert.ToDouble(xybdw.Text), 0);
                Double ee = Math.Round(Convert.ToDouble(dr4["失业缴费工资"].ToString()) * Convert.ToDouble(xsygr.Text), 0);
                Double f = Math.Round(Convert.ToDouble(dr4["失业缴费工资"].ToString()) * Convert.ToDouble(xsydw.Text), 0);
                Double g = Math.Round(Convert.ToDouble(dr4["失业缴费工资"].ToString()) * Convert.ToDouble(xgs.Text), 0);
                Double h = Math.Round(Convert.ToDouble(dr4["医保缴费工资"].ToString()) * Convert.ToDouble(xsybx.Text), 0);
                string sql = "update gerenziliao set 养老个人缴费=a,养老单位缴费=b,医保个人缴费=c,医保单位缴费=d,失业个人缴费=ee ,失业单位缴费=f,工伤=g,生育保险=h";
                try
                {
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.ExecuteNonQuery();                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);                }
            }
            dr4.Close();
            conn.Close();
        }
但是每次我一按那个键,就显示说"已有打开的与此连接相关联的DataReader,必须首先将它关闭"...希望得到解答

解决方案 »

  1.   

    这种工作显然应该在全部在数据库里做.用reader读出来再一条条更新是多此一举.
    你的错误是因为reader独占了数据库连接conn.
    解决方法,新建一个conn执行你的更新. 最好的办法是用一条update语句一次更新所有记录
      

  2.   


        DataTable dt = new DataTable();
        dt.Columns.Add("base", typeof(int));
        dt.Columns.Add("param", typeof(float));
        dt.Columns.Add("result", typeof(float), "base*param");  //result = base*param;    for (int i = 0; i < 10; i++)
        { 
          dt.Rows.Add(i+5,i%10);
        }
        dataGridView1.DataSource = dt;
      

  3.   

    我要的是更新数据库,而不是在dataGridView上显示~