c# - SQL 查询无法计算
问题描述
我的 SQL 查询无法计算出准确的OTAmount
. 我试图向 SQL Server 查询它,查询看起来很好。我唯一改变的是HRate
变量。
decimal DR=0;
decimal HRate = 0;
if (rdSal.HasRows)
{
rdSal.Read();
DR = Convert.ToDecimal(rdSal.GetString(2));
HRate = DR / 8;
}
SqlCommand cmd3 = new SqlCommand();
cmd3.Connection = con;
cmd3.CommandType = CommandType.Text;
cmd3.CommandText = "Insert Into Overtime ([EMPID],[Date],[OTMins],
[OTAmount],[DayofWeek])Select UserID,Date,DateDiff(minute,TimeIn,TimeOut),
(DateDiff(minute,TimeIn,TimeOut)/60.00)*1.25*"+HRate+",DayofWeek from
UserLog where DayofWeek='Saturday' and USERID='" + val + "'AND DATE>='" +
codatebegintxt.Text + "'AND DATE<='" + codateendtxt.Text + "'";
cmd3.ExecuteNonQuery();
con.Close();
解决方案
您可以将您的 DR 更改为:
DR = Convert.ToDecimal(rdSal.GetString(2), System.Globalization.CultureInfo.CurrentCulture);
而HRate = DR / 8.0
不是HRate = DR / 8
.
否则如评论中所述,您可以将其更改为:
string query = "Insert Into Overtime (EMPID, Date, OTMins,
OTAmount, DayofWeek) Select UserID, Date, DateDiff (minute,TimeIn,TimeOut),
(DateDiff(minute,TimeIn,TimeOut)/60.00) * 1.25 * @HRate, DayofWeek from
UserLog where DayofWeek = 'Saturday' and USERID = @UserId AND DATE >=
@DateBegin AND DATE <= @DateEnd";
cmd.Parameters.AddWithValue("HRate", HRate); // can specify precision and scale with .Precision and .Scale.
cmd.Parameters.AddWithValue("UserId", val);
cmd.Parameters.AddWithValue("DateBegin", codatebegintxt.Text);
cmd.Parameters.AddWithValue("DateEnd", codateendtxt.Text);
并通过在变量前添加 @ 来替换命令文本。(希望它不会混淆)。
推荐阅读
- google-cloud-platform - 在 Dialogflow 中设置输出上下文
- javascript - 检查失败的 HTTP 请求
- c# - AutoCAD C# 版本 .dwl 文件
- sql - Golang 中的多租户
- python - Python - PyQt:QThread 完成后继续
- php - 带有嵌套路由的 PHP REST API
- excel - 日期之间的 Sumproduct 与跨列的附加条件
- jenkins - 当特定 JIRA 项目下的所有问题的状态更改为“IN PROGRESS”状态时触发 Jenkins 构建
- css - SVG 在多个图层上的悬停状态,不仅是顶层
- selenium - 如何使用 Jmeter/任何其他工具从所有请求中捕获一些事件请求