2015-04-06 92 views
0

我得到这个异常:"Fatal error encountered during command execution."更新datetype日期

我当前的代码如下所示:

internal void UpdateLastLogin(string userEmail) 
    { 
     DateTime today = DateTime.Now;   

     using (_msqlCon = new MySqlConnection(_connectionString)) 
     { 
      _msqlCon.Open(); 

      _query = "UPDATE Regs SET `LastLogin` = ?today WHERE Email = ?userEmail"; 
      _command = new MySqlCommand(_query, _msqlCon);    

      _command.ExecuteNonQuery(); 
     } 
    } 

列:LastLogin有数据类型date 我寻找更多的信息之前,先试了一下,被:

_query = "UPDATE Regs SET LastLogin = ?today WHERE Email = ?userEmail"; 

我也曾尝试:

_query = "UPDATE Regs SET `LastLogin` = `?today` WHERE Email = ?userEmail"; 

请注意,不同之处在于列和变量上的引号。我哪里错了?

Ps。列Email有类型VarChar

+1

为什么你使用它作为'今天'?也许你的命令认为这个'?today'是一个参数? MySQL有'CURDATE()'顺便得到当前日期。 – 2015-04-06 12:06:21

+0

Cus它作为变量传递? – user1960836 2015-04-06 12:09:02

+0

你在quesy中指定了sql参数,但没有提供任何 – 2015-04-06 12:09:50

回答

1

你不能像你那样在你的命令中使用一个变量。你的语法错了。

将它们定义为您的命令中的参数并添加您的命令的参数名称和值。

_query = "UPDATE Regs SET `LastLogin` = @today WHERE Email = @mail"; 
_command = new MySqlCommand(_query, _msqlCon); 
_command.Parameters.AddWithValue("@today", today); 
_command.Parameters.AddWithValue("@mail", userEmail); 

来自:5.1.4 Working with Parameters

该参数由一个 '@' 符号开头,以表明它是要被处理的 作为参数。

+0

没有必要将它作为参数传递给方法。我想用它作为一个变量。我如何告诉mysql它是一个变量而不是参数? – user1960836 2015-04-06 12:11:45

+1

@ user1960836是的,**你需要!**。您应该在您的命令中定义您的参数名称,并创建您的参数名称及其值,并将此参数添加到您的命令中。 [参数化查询](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)是在您的命令中传递本地变量的最佳方式。否则,会为[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻击打开字符串连接。 – 2015-04-06 12:17:48

+0

感谢您的提升和链接。我想我会通过它作为参数 – user1960836 2015-04-06 12:26:44

0

标准MySqlCommand参数应该以@符号开头,而不是?

所以,你的查询文本应该是"UPDATE Regs SET LastLogin = @today WHERE Email = @userEmail"

另外,如果你在你的查询文本使用参数 - 你必须使用_command.Parameters.Add明确指定。

+0

@对我不起作用,这里?作品。我知道这对一些人来说是个问题。我知道有人使用@cus了吗?对他们不起作用。我不知道这是什么原因,但我的猜测是,它是不同的版本左右 – user1960836 2015-04-06 12:13:10

+0

是的,我知道我必须使用_command.Parameters.Add参数,但这不是一个参数从方法 – user1960836 2015-04-06 12:14:11

+0

我猜我不应该使用_command.Parameters.Add,是吗? – user1960836 2015-04-06 12:14:45