2014-09-03 45 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

相关问题