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