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

C# 查询表达式'@ID=@@IDENTITY'II'中的语法错误(缺少运算符),c#,ms-access,C#,Ms Access,Access 2003 VS 2010 C 正如题目所说的,我在这方面有问题。这与我之前问的问题有关。我希望国防部的将与此线程,但我不确定 Martin Parkin建议在将@Identity与C和MS Access一起使用时,不要关闭Insert和Select之间的连接。我以为我已经成功了,直到我发现事实并非如此。老实说,我不知道如何解决这个问题。所以如果有人能帮助我,我将不胜感激 这是我的btnLogin方法 cmd.CommandText = "INSERT INTO Lo

Access 2003

VS 2010 C

正如题目所说的,我在这方面有问题。这与我之前问的问题有关。我希望国防部的将与此线程,但我不确定

Martin Parkin建议在将@Identity与C和MS Access一起使用时,不要关闭Insert和Select之间的连接。我以为我已经成功了,直到我发现事实并非如此。老实说,我不知道如何解决这个问题。所以如果有人能帮助我,我将不胜感激

这是我的btnLogin方法

        cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)";
        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();

        cmd.CommandText = "SELECT @ID = @@IDENTITY";
     // cmd.Parameters.AddWithValue("@ID", OleDbType.WChar); << tried this, unsuccessful
        int id = (int)cmd.ExecuteScalar(); // getting the same error? 
        myCon.Close();

在btnLogin方法中,如果我这样做

cmd.CommandText=SELECT@ID=@@IDENTITY

并隐藏cmd.ExecuteNonQuery;在它之后。然后,日期和时间将被记录在数据库中,但日期和时间不会保存在数据库中,以便注销

我不确定问题出在btnLogin方法还是btnLogOut方法上,或者两者都有

工作溶液

最初我是这样做的

 cmd.CommandText = " UPDATE [LoginLogTable] SET [LoggedOutDate] = @LoggedOutDate,   
 [LoggedOutTime] = @LoggedOutTime WHERE [ID] = @ID";
 cmd.Parameters.AddWithValue("@ID", id);
 cmd.Parameters.AddWithValue("@LoggedOutDate", DateTime.Now.ToShortDateString());
 cmd.Parameters.AddWithValue("@LoggedOutTime", DateTime.Now.ToString("HH:mm"));
然后我做了这个

 cmd.CommandText = " UPDATE [LoginLogTable] SET [UserName] = @UserName, [LoggedOutDate] = 
 @LoggedOutDate, [LoggedOutTime] = @LoggedOutTime WHERE ID = @ID";
 cmd.Parameters.AddWithValue("@UserName", txtUserName.Text);
 cmd.Parameters.AddWithValue("@LoggedOutDate", DateTime.Now.ToShortDateString());
 cmd.Parameters.AddWithValue("@LoggedOutTime", DateTime.Now.ToString("HH:mm"));
 cmd.Parameters.AddWithValue("@ID", id);
多亏了D Stanley和Gord Thompson。

这个@ID变量并不像您想象的那样在数据库中持久存在。当连接很快关闭时,它将超出范围。我建议您将新身份存储在应用程序中:

假设这些按钮处理程序是表单上的方法,则可以将ID存储为表单的属性:

    // somewhere in the form definition:
    private int ID {get; set;}
    ...

    cmd.CommandText = "SELECT @@IDENTITY";
    int id = (int)cmd.ExecuteScalar();
    this.ID = id;
然后在注销方法中使用ID:

    // get the id from the form
    int id = this.ID;

    cmd.CommandText = " UPDATE [LoginLogTable] SET [LoggedOutDate] = @LoggedOutDate, [LoggedOutTime] = @LoggedOutTime WHERE [ID] = @ID";
    cmd.Parameters.AddWithValue("@ID", id);
    cmd.Parameters.AddWithValue("@LoggedOutDate", DateTime.Now.ToShortDateString());
    cmd.Parameters.AddWithValue("@LoggedOutTime", DateTime.Now.ToString("HH:mm"));
@ID变量并不像您想象的那样在数据库中持久存在。当连接很快关闭时,它将超出范围。我建议您将新身份存储在应用程序中:

假设这些按钮处理程序是表单上的方法,则可以将ID存储为表单的属性:

    // somewhere in the form definition:
    private int ID {get; set;}
    ...

    cmd.CommandText = "SELECT @@IDENTITY";
    int id = (int)cmd.ExecuteScalar();
    this.ID = id;
然后在注销方法中使用ID:

    // get the id from the form
    int id = this.ID;

    cmd.CommandText = " UPDATE [LoginLogTable] SET [LoggedOutDate] = @LoggedOutDate, [LoggedOutTime] = @LoggedOutTime WHERE [ID] = @ID";
    cmd.Parameters.AddWithValue("@ID", id);
    cmd.Parameters.AddWithValue("@LoggedOutDate", DateTime.Now.ToShortDateString());
    cmd.Parameters.AddWithValue("@LoggedOutTime", DateTime.Now.ToString("HH:mm"));

@D Stantley-不应该是int id=intcmd.ExecuteScalar;在注销方法中,由于当前上下文中不存在名称“id”的错误,我如何调用id?@bucketblast修复了铸造错误,您需要决定如何保存id。由于这些似乎在按钮处理程序中,最简单的方法是将其存储为窗体的属性。随着应用程序和编程技能的成熟,您将发现更好的方法,但将其作为表单的属性将起作用;在那个方法中,但我仍然得到相同的错误。我将在顶部进行更新。@bucketblast您需要更改第二个命令,并查看我的answer@DStanley-日期和时间不记录btnLogOut方法。来自您建议的解决方案。@D Stantley-不应该是int id=intcmd.ExecuteScalar;在注销方法中,由于当前上下文中不存在名称“id”的错误,我如何调用id?@bucketblast修复了铸造错误,您需要决定如何保存id。由于这些似乎在按钮处理程序中,最简单的方法是将其存储为窗体的属性。随着应用程序和编程技能的成熟,您将发现更好的方法,但将其作为表单的属性将起作用;在那个方法中,但我仍然得到相同的错误。我将在顶部进行更新。@bucketblast您需要更改第二个命令,并查看我的answer@DStanley-日期和时间不记录btnLogOut方法。根据您建议的解决方案。