0
我有一段代碼,在其中添加對象並從對象上下文中刪除另一個代碼。當保存在對象環境的變化,它提出了以下SQL異常:從Entity Framework執行語句時出現SQL轉換錯誤,但在執行相應的sql時工作正常
無法轉換爲nvarchar值「KV Oberaargau136」爲數據類型int
當然「KV Oberaargau136」中不能轉換到一個int值,麻煩是我不知道那串是如何到達那裏的。該字符串可以來自唯一的地方是從下面的代碼位:
History h = new History()
{
idTableRef = rpo.idOA,
tableRef = "RelPersonOrganism",
date = now,
idResponsible = entities.getUserOA().id,
data = "<delete><organism><name><![CDATA[%name%]]></name><id>%id%</id></organism></delete>"
.Replace("%name%", organism.defaultName)
.Replace("%id%", organism.idOA.ToString())
};
如果歷史是一個實體,數據是一個字符串(SQL Server上的實際的XML數據類型)
所以我已經試過用SQL事件探查器,看看有什麼SQL語句可能會引發該異常,這裏是會拋出異常的痕跡的部分:
RPC:Starting exec sp_executesql N'insert [dbo].[History]([tableRef], [idTableRef], [date], [idResp... SQLTransaction Exception Error: 245, Severity: 16, State: 1 User Error Message Conversion failed when converting the nvarchar value 'KV Oberaarau136' to data type int. SQLTransaction SP:Completed insert [dbo].[History]([tableRef], [idTableRef], [date], [idResponsible], [data]) v... RPC:Completed exec sp_executesql N'insert [dbo].[History]([tableRef], [idTableRef], [date], [idRespon...
,其中完整的SQL語句(顯示在上面的跟蹤3次)是:
EXEC sp_executesql
N'insert [dbo].[History]([tableRef], [idTableRef], [date], [idResponsible], [data])
values (@0, @1, @2, @3, @4)
select [id]
from [dbo].[History]
where @@ROWCOUNT > 0 and [id] = scope_identity()',
N'@0 nvarchar(255),@1 int,@2 datetime2(7),@3 int,@4 nvarchar(max) ',
@0=N'RelPersonOrganism',
@1=1255,
@2='2013-01-11 12:35:18.4984109',
@3=1,
@4=N'<delete><organism><name><![CDATA[KV Oberaargau]]></name><id>136</id></organism></delete>'
所以通過查看跟蹤,我得出結論說這個SQL語句會被控告,儘管它對我來說似乎沒有任何錯誤。所以我試圖在SQL Server Management Studio中執行它,它工作得很好,沒有錯誤...
那麼可能會觸發該錯誤?
表上的任何觸發器? –
哦,是的,有一個,我想這可能會成爲問題。我會回來的這一個... – Daniel
就是這樣。問題來自觸發器。 @Martin:如果你想添加一個答案作爲答案,我會將其作爲選中的一個進行檢查。 – Daniel