0

ここから貴重なアドバイスをしました

しかし、件名のタイトルにあるように、前の質問に関連してbtnLoginメソッドでエラーが発生していますが、実際には同じ問題だと思いますか?これは、前の質問からエラーが発生していなかったためです。誰かがここで私を助けることができるならば、前もって感謝します。

アクセス2003VS2010 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

ここでのアドバイスのいくつかは、SQLServerでのみ機能する可能性があると思います。MSAccess2003を使用しています。

アップデート5

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

エラーを受信して​​います...

SQLステートメントの終了後に見つかった文字。

4

3 に答える 3

4

コードにエラーがあるようです。コマンドのテキストを最初の行に設定してから、2番目の行に完全に置き換えます。

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

最初のログイン方法では、コマンドテキストを2回設定してオーバーライドします。

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」の前。

そしてところで。@@ IDENTITYの代わりにSCOPE_IDENTITY()を使用します。http://msdn.microsoft.com/en-us/library/ms190315.aspxおよびSQL :挿入したばかりの値のIDを取得する方法を参照してください。

また、同様の質問があり、コマンドを実行する正しい方法を示しています 。最後に挿入されたIDを取得する方法は?

于 2013-03-25T23:06:50.173 に答える
0

ユーザーIDを取得することを考えている場合は、両方のステートメントを1つのバッチに結合する必要があります

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