我在这里给出了宝贵的建议
但正如主题标题所说,我在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";
我已经放置了一个;我得到错误的…
只有赋值、call、自增、自减和new对象表达式可以用作语句
查看其他成员提供的其他解决方案
更新4我认为这里的一些建议可能只适用于SQL Server。我使用的是MS Access 2003。
更新5cmd.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";
在第一个登录方法中,通过设置两次来覆盖命令文本:
cmd.CommandText = "INSERT INTO LoginLogTable (UserName, LoggedInDate, LoggedInTime) VALUES (@UserName, @LoggedInDate, @LoggedInTime)";
cmd.CommandText = "SELECT @ID = @@IDENTITY";
在'update 2'中,您将select语句连接到insert语句之后,从而产生以下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";