1

有人可以让我知道以下查询的问题吗?我正在运行 MS Access 及其捐赠

查询表达式 '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;
   }
}
4

3 回答 3

1

SELECT @@Identity是一个专门的查询。并且@@Identity仅在该上下文中有效。如果您尝试在@@Identity其他地方使用,例如在WHERE子句中,则 db 引擎将抛出错误。

您必须从中检索值SELECT @@Identity,保存它,然后在您的其他查询中使用该保存的值。

于 2013-11-09T14:49:33.697 回答
0

去掉)最后的

WHERE id = @@IDENTITY) 
                     ^---here
于 2013-11-09T14:13:59.273 回答
0

您是否在选择查询之前在此批次中插入一行?据我所知,@@IDENTITY 仅在插入导致生成标识值的行后直接可用,即插入到自动增量标识列。

再次编辑:尝试将其包含在子查询中,例如id = (SELECT @@IDENTITY)

于 2013-11-09T14:23:47.870 回答