Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SQL查询中执行操作?_C#_Sql Server - Fatal编程技术网

C# 如何在SQL查询中执行操作?

C# 如何在SQL查询中执行操作?,c#,sql-server,C#,Sql Server,我发出一个命令,如果书过期了,将被处以罚款。这是我的密码 if (duedate.Value < DateTime.Now) { cmd.CommandText = ("UPDATE Penalty SET Penalty = '"+ (dateTimePicker1.Text - duedate.Value)*50 +"' WHERE Title = '" + textBox3.Text + "'"); ... } if(duedate.Value

我发出一个命令,如果书过期了,将被处以罚款。这是我的密码

if (duedate.Value < DateTime.Now)
{
    cmd.CommandText = ("UPDATE Penalty SET Penalty = '"+ (dateTimePicker1.Text - duedate.Value)*50 +"' WHERE Title = '" + textBox3.Text + "'");
    ...
}
if(duedate.Value

此代码未运行,因为它在
(dateTimePicker1.Text-duedate.Value)
上有错误。如果您试图从字符串中减去datetime,请尝试下面的操作

(dateTimePicker1.Value- duedate.Value).TotalDays*50

组合查询的优雅方式是参数化查询:

在伪代码中:

d1 = compute the Penalty value
然后,发出你的命令

cmd.CommandText = "UPDATE Penalty SET Penalty = @d1 WHERE Title = @d2";
cmd.Parameters.Add ("@d1", SqlDbType.DateTime).Value = d1;

哎呀!伊加兹!神圣的蝙蝠侠

  • 参数化您的SQL查询,否则将成为
  • 不要试图从字符串中减去日期。那是荒谬的
  • 不要用
    DateTime.Now
    计算
  • 不要硬编码
    50
    。我想这是每天罚款的金额。
    • 这应该在变量中传递,以便以后需要时可以对其进行调整
    • 你需要先到一整天

这项工作的,先对内部值进行转换,然后减去最终的外部值


转换到datetime(转换到datetime(dateTimePicker1.Text)-转换到datetime(duedate.Value))*50

什么类型的
duedate.Value
?和
dateTimePicker1。Text
string
您不能在
string
中执行减法,因为该代码容易受到sql注入攻击。这真糟糕!这会编译吗
(dateTimePicker1.Text-duedate.Value)
@SriramSakthivel,显然,不,不编译。我忘了说这是伪代码。我会解决的。你解决了其他问题。但是没有指出OP为什么在这里的主要问题。现在你的答案看起来不错+1