如何在c#中的SQL Server中的一列的所有值应用公式?

问题描述:

我正在制定工资管理系统,其中双薪工资等于员工固定工资的一定比例,这个比例是由某个百分比给定的,即固定工资的12%,这个百分比往往会随时间变化。当百分比发生变化时,根据该百分比的双重报酬值也必须在员工表中更改。 这里是我的代码:如何在c#中的SQL Server中的一列的所有值应用公式?

string query; 
       query = "select count(*) from ConditionalEarnings where [Double Duty]!=0"; 
      SqlCommand value = new SqlCommand(query,DataFind); 
      value.ExecuteNonQuery(); 
      int no = Convert.ToInt32(value.ExecuteScalar()); 
      textBox7.Text = no.ToString(); 
      for (int o = 0; o< no; o++) 
      { 
       string query1; 
       query1 = "select EmpId from ConditionalEarnings where [Double Duty]!=0"; 
       SqlCommand value1 = new SqlCommand(query1, DataFind); 
       value1.ExecuteNonQuery(); 
       int id = Convert.ToInt32(value1.ExecuteScalar()); 
       textBox8.Text = id.ToString(); 
       string query2; 
       query2 = "Select EmpRunningBasic from EmployeeRunningBasic where [email protected]"; 
       SqlCommand r = new SqlCommand(query2,DataFind); 
       r.Parameters.Add("@id", SqlDbType.VarChar).Value = id; 
       r.ExecuteNonQuery(); 
       int rb = Convert.ToInt32(r.ExecuteScalar()); 
       int doublechange = Convert.ToInt32(textBox1.Text); 
      int apply = (rb * doublechange)/100; 

      SqlCommand f = new SqlCommand("Update ConditionalEarnings set [Double Duty]='" + apply + "' where [email protected]", DataFind); 
      f.Parameters.Add("@id", SqlDbType.VarChar).Value = id; 
      f.ExecuteNonQuery(); 


      } 

我的形式如下: Its my form

这是我的代码来执行任务。 当我输入百分比并执行程序更新双倍工资的特定列中的所有值时,只更改表的第1行,双重任务的所有其他行单元保持不变。意味着我的程序工作在一个循环中,并且计算并一次又一次地替换第一行的列的值,而不会转到下一行。如何在基于相同条件选择的所有行上应用更改?

its my table showing employee id column and double duty column highlighted

双重职责列的值并没有改变对所有员工的ID,而是在表中只有第一个ID。

+0

似乎是一个[XYPropblem(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)给我。请显示相关的表格DDL,一些样本数据为DML,以及所需的输出。 –

+0

取决于文本框的值,必须进行计算并且必须在计算后更新表中的值,那就是我需要的!!!!!! –

+0

Deam Maaz。请阅读[问]并试着了解这里的人们在自己的业余时间回答问题。这里没有人能够得到报酬来回答问题,任何人都不需要付出任何代价。 –

首先,你必须让员工(他们的运行基础知识)要迭代,然后在每一个应用的计算,然后更新数据库

看看下面的代码,它可以帮助你(修改代码以满足您的需求)

 int no = 0; 
     string query = "select count(*) from ConditionalEarnings where [Double Duty]!=0"; 
     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      SqlCommand cmd = new SqlCommand(query, conn); 
      conn.Open(); 
      no = Convert.ToInt32(cmd.ExecuteScalar()); 
     } 

     string selectQuery = "select a.EmpId,b.EmpRunningBasic from ConditionalEarnings a left join EmployeeRunningBasic b on a.EmpId=b.EmpId where a.[Double Duty]!=0"; 
     SqlDataAdapter adapter = new SqlDataAdapter(selectQuery, DataFind); 
     DataTable dtEmp; 
     adapter.Fill(dtEmp); 

     textBox7.Text = no.ToString(); 

     string updateQuery = ""; 
     foreach (DataRow row in dtEmp) 
     { 
      string empId = row["EmpId"].ToString(); 
      textBox8.Text = empId; 
      int rb = Convert.ToInt32(row["EmpRunningBasic"]); 
      int doublechange = Convert.ToInt32(textBox1.Text); 
      int apply = (rb * doublechange)/100; 

      updateQuery += string.Format("Update ConditionalEarnings set [Double Duty]='{1}' where EmpId='{0}';", empId, apply); 
     } 
     if (!string.IsNullOrEmpty(updateQuery)) 
     { 
      using (SqlConnection conn = new SqlConnection(connString)) 
      { 
       SqlCommand cmd = new SqlCommand(updateQuery, conn); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
+0

非常感谢先生 –