Visual Basic更新列正在查询中进行算术运算

时间:2015-04-11 11:28:31

标签: sql vb.net asp-classic

我有一个在SQL数据库中显示结果的页面。然后我有另一个页面,让我编辑我想要编辑的行。其中一个字段是日期。如果通过我的一个页面添加到数据库中,则会以格式(YEAR-MN-DY)(2014-04-11)输入。当我去更新日期时,它会对日期进行算术运算。例如。如果日期目前是2014-04-11,并且我将日期更新/更改为2010-01-01,则会将日期替换为“2008”,即2010 -1 - 1.

变量是通过HTML表单接收的字符串。

strSQL = "UPDATE sales SET cust_id = " & intcust_id & ", agent_id = " & intagent_id & ", saledate = " & strsaledate & " WHERE sale_id = " & intsale_id & ""

我正在运行SQL查询。

此外,DATE在数据库中是VARCHAR2,在整个VB代码中用作字符串。我保持这种方式,因为不是每个人都输入相同的日期,这是为了简单。

2 个答案:

答案 0 :(得分:0)

正在进行减法,因为日期不会被解释为日期,而是数字,因为它缺少引号。

之前

strSQL = "UPDATE sales SET cust_id = " & intcust_id & ", agent_id = " & intagent_id & ", saledate = " & strsaledate & " WHERE sale_id = " & intsale_id & ""

<强>后

strSQL = "UPDATE sales SET cust_id = " & intcust_id & ", agent_id = " & intagent_id & ", saledate ='" & strsaledate & "' WHERE sale_id = " & intsale_id & ""

答案 1 :(得分:0)

WorkSmarter的答案解决了这个问题。但我认为你不应该使用字符串连接。它对sql-injections是开放的,它确实更好,更简单,并且使用参数更不容易出错。像

这样的东西
strSQL = "UPDATE sales SET cust_id = @custid, agent_id = @agentid, saledate = @salesdate WHERE sale_id = @saleid"
set custid = cmd.CreateParameter("@custid", adChar,adInput,10, incust_id)
set agentid = cmd.CreateParameter("@cagentid", adInteger,adInput,0, ) ...

我觉得你有一个名为cmd的ADODB.Command。通过这样做,你使你的代码更安全,在我看来,更具可读性,因为你不必一直担心引号和单引号。 sql命令和涉及的params /值之间有明显的区别。 您可以在http://www.w3schools.com/asp/met_comm_createparameter.asp

上找到有关参数的详细文档