2014-09-03 73 views
0

我有問題,以varbinary(max)列類型插入行後獲得身份值。下面是(根據PetaPoco Page),我使用的代碼:PetaPoco Varbinary(最大值)和IdentityColumn

using (var uow = UnitOfWorkFactory.Create()) 
{ 
     var result = uow.Db.Execute(@"INSERT INTO LOG_EXPORT (DateTime, FileName, FileSize, FormatID, Lines, Login, UPO, XMLFile) 
      VALUES (@0, @1, @2, @3, @4, @5, @6, @7)", logExport.DateTime, logExport.FileName, logExport.FileSize, logExport.FormatID, logExport.Lines, logExport.LogExportId, new SqlParameter() { SqlDbType = SqlDbType.VarBinary, Value = DBNull.Value }, new SqlParameter() { SqlDbType = SqlDbType.VarBinary, Value = DBNull.Value }); 
     uow.Commit();    
     return result; 
} 

它返回所返回的行的數目。我想有相同的結果,當我使用:

var result = uow.Db.Insert(logExport); 
uow.Commit(); 
return result; 

我也曾嘗試使用:

var result = uow.Db.ExecuteScalar<int>("SELECT SCOPE_IDENTITY()"); 
    uow.Commit(); 
    return result; 

但我得到了一個錯誤。我不想使用「SELECT max()」。什麼是最好的解決方案呢?

感謝, 拿捕淨

+1

使用時,你做你的'INSERT'選擇你想要的'OUTPUT'條款。請參閱http://msdn.microsoft.com/en-us/library/ms177564.aspx – Zer0 2014-09-03 20:12:06

+0

感謝您的回答!不幸的是既沒有PetaPoco Db.Execute或Db.Query 可以處理OUTPUT子句... – Kamil 2014-09-03 20:41:24

回答

1

你確定返回的行數是不是最後插入記錄的ID?

您可以修改INSERT語句包括OUTPUT Inserted.Id如下:

var result = db.ExecuteScalar<int>(@"INSERT INTO ... UPO, XMLFile) OUTPUT Inserted.Id VALUES (@0 ... 
+0

是啊!完美的作品!我曾嘗試使用@Table變量的OUTPUT。這就是爲什麼它不能與PetaPoco正確工作。 – Kamil 2014-09-04 09:07:52