查询表达式’@ID = @@ IDENTITY’中的语法错误(缺少运算符)

我从这里提出了宝贵的建议

但是,正如主题标题所说我在btnLogin方法中收到错误,与我之前的问题相关,但实际上是同一个问题,我想? 我之所以这么说,是因为我没有从我以前的问题中得到错误。 如果有人可以帮助我,请提前致谢。

访问2003 VS 2010 c#

这是我的btnLogin方法

OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)"; cmd.CommandText = "SELECT @ID = @@IDENTITY"; cmd.Parameters.AddWithValue("@UserName", txtUserName.Text); cmd.Parameters.AddWithValue("@LoggedInDate", DateTime.Now.ToShortDateString()); cmd.Parameters.AddWithValue("@LoggedInTime", DateTime.Now.ToString("HH:mm")); cmd.Connection = myCon; myCon.Open(); cmd.ExecuteNonQuery(); myCon.Close(); 

这是我的btnLogOut方法。

  OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = " UPDATE [LoginLogTable] SET [LoggedOutDate] = ?, [LoggedOutTime] = ? WHERE ID = @ID"; cmd.Parameters.AddWithValue("@LoggedOutDate", DateTime.Now.ToShortDateString()); cmd.Parameters.AddWithValue("@LoggedOutTime", DateTime.Now.ToString("HH:mm")); cmd.Connection = myCon; myCon.Open(); cmd.ExecuteNonQuery(); 

代码的目的是记录用户登录的日期和时间以及用户注销的日期和时间。

更新2我也试过这个……

 cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)" + "SELECT @ID = @@IDENTITY"; 

然后我收到错误…

在SQL语句结束时缺少分号(;)。

更新3

 cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)"; "SELECT @ID = @@IDENTITY"; 

我放了一个; 我得到的错误…

只有赋值,调用,递增,递减和新对象表达式才能用作语句

看看其他成员提供的其他解决方案

更新4

我认为这里的一些建议可能只适用于SQL Server。 我正在使用MS Access 2003。

更新5

 cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime); SELECT @ID = @@IDENTITY"; 

收到错误……

SQL语句结束后找到的字符。

看来您的代码可能有错误。 您将cmd的Text设置为第一行,然后将其完全替换为第二行:

 cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)"; cmd.CommandText = "SELECT @ID = @@IDENTITY"; 

所以你实际上只是执行:

 cmd.CommandText = "SELECT @ID = @@IDENTITY"; 

在第一个登录方法中,通过设置两次来覆盖commandtext:

 cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)"; cmd.CommandText = "SELECT @ID = @@IDENTITY"; 

在’update 2’中,您将在INSERT语句之后立即连接SELECT语句,从而产生以下SQL:

 INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)SELECT @ID = @@IDENTITY 

你必须设置’;’ 在INSERT语句的末尾,在’SELECT’之前。

顺便说一下。 使用SCOPE_IDENTITY()而不是@@ IDENTITY,请参阅http://msdn.microsoft.com/en-us/library/ms190315.aspx和SQL:如何获取我刚刚插入的值的id?

此外,这是一个类似的问题,显示执行命令的正确方法: 如何获取最后插入的ID?

如果您正在考虑获取用户ID,则必须将这两个语句合并到一个批处理中

  cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime) SELECT @@IDENTITY";