0

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

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

4

3 回答 3

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"; 
于 2013-03-25T22:48:57.810 回答
0

在第一个登录方法中,您通过设置两次来覆盖命令文本:

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

在“更新 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:如何获取我刚刚插入的值的 id?

另外,这里有一个类似的问题,显示了执行命令的正确方法: 如何获取最后插入的 id?

于 2013-03-25T23:06:50.173 回答
0

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

 cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime) SELECT @@IDENTITY";
于 2013-03-25T23:09:23.083 回答