如何从数据库计算一个人每小时的工资?
我的代码在这里:
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"
答案 0 :(得分:0)
错误是"运营商" /"不能应用于类型的操作数 "串"和" int"
错误消息非常有用。以下
dt.Tables[0].Rows[0]["SalaryGrade"].ToString()
是string
,22
是int
字面值。您不能将除法运算符应用于它们。你如何将string
与int
分开,这是一个毫无意义的操作。您需要的是以下内容:
((decimal)dt.Tables[0].Rows[0]["SalaryGrade"])/(22*8)
首先,您将SalaryGrade
转换为小数,然后将其与小时分开。
注意:在上面一行中,我假设SalaryGrade
可以投放到decimal
。如果无法进行强制转换,则会抛出异常。因此,尝试使用TryParse
的{{1}}方法是一种更安全的方法:
decimal
答案 1 :(得分: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()
方法。)否则你可能会以零结束而不知道原因。
答案 2 :(得分:0)
发生错误是因为您无法在字符串中使用数学运算! 试试这个:声明一个int变量并从表中分配数据然后使用“label.Text”中的int将int转换为string。 希望帮助你了!
答案 3 :(得分:-1)
我的代码现在正在运行:)感谢你们。
Reminder
另外一件事,当涉及到数千人时,我怎么能得到逗号?