2013-03-25 59 views
0

我已經給了寶貴的通知發出here語法錯誤(缺少操作員)在查詢表達式「@ID = @@ IDENTITY」

但正如主題標題說我在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語句的結束後發現

人物。

+0

但是,你想用第二個陳述來做什麼?你不會在任何地方讀回這個值'(@ID)'。 – Steve 2013-03-25 23:08:27

+0

您針對哪種版本的SQL Server運行?你爲什麼在你的標籤中有ms-access? – 2013-03-25 23:16:23

+0

我正在使用微軟訪問 - 我想也許有人與SQL Server的知識可能能夠幫助我,另一個字擴大標籤,以進一步到達領域 – bucketblast 2013-03-25 23:24:17

回答

4

看起來您的代碼可能有錯誤。您可以設置cmd以第一行的文本,然後完全用第二個替換:

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

所以你實際上只執行:

cmd.CommandText = "SELECT @ID = @@IDENTITY"; 
+0

感謝您的快速回復,如果你不介意你能看看我的更新? – bucketblast 2013-03-25 23:05:15

+1

@bucketblast然後在你的第一個陳述結尾處加上';'。提示:在@LoggedInTime後面。 – DaveShaw 2013-03-25 23:06:45

+0

@DaveShaw - 你可以看看我的更新嗎?請輸入 – bucketblast 2013-03-25 23:24:53

0

在第一次登錄的方法,你重寫CommandText中,通過設置兩次:

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

在「更新2」,你的INSERT語句之後concatting的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: How to get the id of values I just INSERTed?

而且,這裏是一個類似的問題,顯示出正確的方法來執行命令: How to get last inserted id?

+0

這是SCOPE_IDENTITY()與Access一起工作嗎? – bucketblast 2013-03-25 23:25:31

+0

哦,我錯過了Access部分。不,我不認爲它確實如此:-) – 2013-03-26 11:36:34

+0

沒關係。我要回到原來的計劃。這是用戶註銷時,日期和時間將記錄到新的ID(自動編號)。看起來MS-Access和C#只適用於基礎。 – bucketblast 2013-03-26 22:39:44

0

如果您想獲取用戶的編號,你必須將這兩個陳述結合到一個批次中

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

TrustyCoder - I done @LoggedInTime);選擇但出錯 – bucketblast 2013-03-25 23:20:20

相關問題