2013-11-09 61 views
1

有人可以讓我知道下面的查詢問題嗎?我上的MS Access運行及其給MS Access @@ identity query issue

語法錯誤在查詢表達式 'ID = @@ IDENTITY'

代碼:

public DosageBO SaveDosage(DosageBO dosage) 
{ 
    try 
    { 
     using (IDbConnection connection = OpenConnection()) 
     { 
     StringBuilder sql = new StringBuilder(); 
     sql.AppendLine("INSERT INTO dosage_master (medicine_type, dosage, remarks, updateby, updatedate)"); 
     sql.AppendLine("VALUES (@type, @dose, @remarks, @updateby, NOW());"); 

     var parameters = new 
        { 
         type = dosage.MedicineType, 
         dose = dosage.Dosage, 
         remarks = dosage.Remarks, 
         updateby = Environment.UserName 
        }; 

     connection.Execute(sql.ToString(), parameters); 

     return connection.Query<DosageBO>("SELECT medicine_type as MedicineType, dosage, remarks FROM dosage_master WHERE id = @@IDENTITY").FirstOrDefault(); 
     } 
    } 
    catch 
    { 
     throw; 
    } 
} 

回答

1

SELECT @@Identity是一個專門查詢。並且@@Identity僅在此情況下有效。如果您嘗試在其他地方使用@@Identity,如在WHERE子句中,則數據庫引擎將引發錯誤。

您將不得不從SELECT @@Identity檢索值,保存它,然後在其他查詢中使用該保存的值。

+0

是有意義的。謝謝 – techknackblogs

0

取出 )
WHERE id = @@IDENTITY) 
        ^---here 
+0

它仍然給出相同的問題。 – techknackblogs

+0

我認爲它是Access DB的簡稱。 – techknackblogs

0

您是否在選擇查詢之前在此批次中插入一行? 據我所知,@@ IDENTITY僅在插入導致生成標識值的行後纔可用,即插入自動增量標識列。

再次編輯: 嘗試在一個子查詢括起來e.g id = (SELECT @@IDENTITY)

+0

是的,我正在插入一行,並且由於它的自動編號,我正在使用@@ identity來獲取最後一個id並再次查詢同一個表以獲取所有數據。 – techknackblogs

+0

發佈更多驗證碼。 –

+0

添加完整的代碼 – techknackblogs