2013-01-11 58 views
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中執行它,它工作得很好,沒有錯誤...

那麼可能會觸發該錯誤?

+1

表上的任何觸發器? –

+0

哦,是的,有一個,我想這可能會成爲問題。我會回來的這一個... – Daniel

+0

就是這樣。問題來自觸發器。 @Martin:如果你想添加一個答案作爲答案,我會將其作爲選中的一個進行檢查。 – Daniel

回答

1

我看不出你發佈的查詢可以直接導致該錯誤消息的任何方式。

因此,檢查是否有任何觸發器或計算列解析XML並可能是原因。