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

时间:2013-03-25 22:44:24

标签: c# sql-server ms-access

我从here

提供了宝贵的建议

但正如主题标题所说我在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语句结束后找到的字符。

3 个答案:

答案 0 :(得分:4)

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

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

所以你实际上只是在执行:

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

答案 1 :(得分:0)

在第一个登录方法中,通过设置两次来覆盖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.aspxSQL: How to get the id of values I just INSERTed?

此外,这是一个类似的问题,显示了执行命令的正确方法: How to get last inserted id?

答案 2 :(得分:0)

如果您正在考虑获取用户ID,则必须将这两个参数合并为一个批次

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