C# 如何从数据库计算每个组合框值的值?
如何从数据库中计算一个人的每小时工资 我的代码在这里:C# 如何从数据库计算每个组合框值的值?,c#,C#,如何从数据库中计算一个人的每小时工资 我的代码在这里: sqc = con.CreateCommand(); string query5 = "SELECT [SalaryGrade] FROM tbl_gradestep where GradeNumber =" + cmbGradeNumber.SelectedItem.ToString() + " and StepNumber =" + cmbStepNumber.SelectedItem.ToString() + ""; sqc.Comm
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”类型的操作数
错误是“运算符”/“不能应用于类型的操作数
“string”和“int”
错误消息提供了大量信息
dt.Tables[0].Rows[0]["SalaryGrade"].ToString()
是一个字符串
,而22
是一个int
文本。您不能将除法运算符应用于它们。如何将字符串
与int
进行除法,这是一个无意义的操作。您需要如下操作:
((decimal)dt.Tables[0].Rows[0]["SalaryGrade"])/(22*8)
首先将SalaryGrade
转换为十进制,然后将其除以小时数
注意:在上面一行中,我假设SalaryGrade
可以转换为decimal
。如果转换不可能,将抛出异常。因此,更安全的方法是尝试使用decimal
的TryParse
方法:
decimal salaryGrade;
if(decimal.TryParse(dt.Tables[0].Rows[0]["SalaryGrade"], out salaryGrade))
{
var salaryPerHour = salaryGrade/(22*8);
}
这是一个非常明确的字符串:
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()
方法。)否则,您可能会以零结束,而不知道原因。发生错误是因为您无法在字符串中使用数学运算!
尝试以下操作:声明一个int变量并将表中的数据赋值给它,然后使用“label.Text”赋值中的int将该int转换为字符串。
希望对你们有所帮助!我的代码现在正在运行:)谢谢你们
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();
}
还有一件事,当逗号有几千个时,我怎样才能得到它呢?编译器正在告诉你到底哪里出了问题-你不能对
字符串和int
使用/
运算符。首先将字符串解析为一个数字。如何将字符串除以一个数字?在l中,这两个*
符号在做什么blHour.Text
assignment?你能做一下代码吗?>。这个*是斜体的HeHeHeHe指定的cast无效:(@James DeanLorenzoAlimboyogue)数据库中SalaryGrade
的数据类型是什么?varchar(50)它给我输出“xx.xxxxxxxxxxxxxxxxx”我怎么能在点后两个数字?hehenah我现在很好,我刚刚输入了”“0.00”到.ToString(“0.00”)对不起,先生,你能把我的问题投票给我吗?:(我不能再问问题了:((嗯,如果我想放两位小数怎么办?@James DeanLorenzoAlimboyogue:用小数代替整数表示小数精度。