2016-11-15 76 views
-6

如何从数据库中计算每小时的工资?如何计算数据库中每个组合框值的值?

我的代码是在这里:

sqc = con.CreateCommand(); 
string query5 = "SELECT [SalaryGrade] FROM tbl_gradestep where GradeNumber =" + cmbGradeNumber.SelectedItem.ToString() + " and StepNumber =" + cmbStepNumber.SelectedItem.ToString() + ""; 
sqc.CommandText = query5; 

sda = new SqlDataAdapter(sqc); 
dt = new DataSet(); 
sda.Fill(dt); 

if(dt.Tables[0].Rows.Count > 0) 
{ 
    lblSalary.Text = dt.Tables[0].Rows[0]["SalaryGrade"].ToString(); 
    lblHour.Text = (*dt.Tables[0].Rows[0]["SalaryGrade"].ToString()/22*/8); 
} 

con.Close(); 

的错误是

操作 “/” 不能应用于类型 “string” 的操作数和 “INT”

+3

编译器告诉你到底什么是错的 - 你不能在'string'和'int'上使用'/'运算符。首先将字符串解析为数字。 –

+0

如何用一个数字来分割一个字符串? – Hank

+0

你的'lblHour.Text'任务中有两个'*'符号在做什么? –

回答

0

这是相当明确的,一个字符串:

dt.Tables[0].Rows[0]["SalaryGrade"].ToString() 

字符串就是文字。你不要对它进行数学运算。如果不是

lblHour.Text = (int.Parse(dt.Tables[0].Rows[0]["SalaryGrade"])/22/8); 

保证,那么你可能需要一些错误首先检查:如果此字符串是保证是一个整数,你可以直接将其转换

int salaryGrade; 
if (!int.TryParse(dt.Tables[0].Rows[0]["SalaryGrade"], out salaryGrade)) 
{ 
    // wasn't an integer, handle the error condition here 
} 
lblHour.Text = (salaryGrade/22/8); 

注:整数除法只会导致一个整数。如果你正在寻找十进制值,你会想要将你的数字转换成小数精度。 (比如decimal,当然也有.Parse().TryParse()方法)。否则,你可能会以0结束,不知道为什么。

+0

谢谢:) :) –

+0

uhm如果我想输入两位小数? –

+0

@ James-DeanLorenzoAlimboyogue:使用小数而不是int来表示小数精度。 – David

0

错误是“运算符”/“不能应用于 类型的操作数”字符串“和”int“

错误消息是非常丰富的。下面

dt.Tables[0].Rows[0]["SalaryGrade"].ToString() 

string22int字面。您不能将分部操作员应用于他们。你怎么能把stringint分开,这是一个没有意义的操作。你需要的是类似以下内容:

((decimal)dt.Tables[0].Rows[0]["SalaryGrade"])/(22*8) 

首先,你投的SalaryGrade到小数点,然后用你的时间划分这一点。

注意:在上面的行中,我认为SalaryGrade可以被铸造到一个decimal。如果演员不可行,则会抛出异常。因此,一个更安全的方法,它会尝试使用的decimalTryParse方法:

decimal salaryGrade; 
if(decimal.TryParse(dt.Tables[0].Rows[0]["SalaryGrade"], out salaryGrade)) 
{ 
    var salaryPerHour = salaryGrade/(22*8); 
} 
+0

指定的强制转换无效:( –

+0

@詹姆斯DeanLorenzoAlimboyogue什么SalaryGrade'的'在数据库中的数据类型? – Christos

+0

VARCHAR(50) 它给我的输出 “xx.xxxxxxxxxxxxxx” 我怎样才能使它只有两个数字后点?hehe –

0

发生错误是因为您无法在字符串中使用数学运算! 试试这个:声明一个int变量并为其分配表中的数据,然后使用“label.Text”中的int赋值将该int转换为字符串。 希望帮助你!

-1

我的代码现在工作:)谢谢你们。

decimal salaryGrade; 
    sqc = con.CreateCommand(); 
     string query5 = "SELECT [SalaryGrade] FROM tbl_gradestep where GradeNumber =" + cmbGradeNumber.SelectedItem.ToString() + " and StepNumber =" + cmbStepNumber.SelectedItem.ToString() + ""; 
     sqc.CommandText = query5; 
     sda = new SqlDataAdapter(sqc); 
     dt = new DataSet(); 
     sda.Fill(dt); 
     if(dt.Tables[0].Rows.Count > 0) 
     { 
      lblSalary.Text = dt.Tables[0].Rows[0]["SalaryGrade"].ToString();      
      if (decimal.TryParse(dt.Tables[0].Rows[0]["SalaryGrade"].ToString(), out salaryGrade)) 
      { 

      } 
      lblHour.Text = Convert.ToDecimal(salaryGrade/22/8).ToString("0.00"); 


     } 

     con.Close(); 
    } 

还有一件事我怎样才能得到数以千计的逗号?

相关问题