2009-12-11 129 views
9

我正在一個名爲Telligent的社區平臺上進行集成。我正在使用稱爲BlogML的第三方插件將博客帖子從XML文件(以BlogML格式)導入我的本地Telligent站點。 Telligent平臺在其SDK中附帶了許多類,以便我可以通過編程添加內容,例如博客帖子。例如。SQL錯誤:字符串或二進制數據將被截斷

myWeblogService.AddPost(myNewPostObject); 

我基本上用BlogML應用解析XML和創建博客文章對象,然後將它們添加到使用像上面的示例代碼行的網站。經過約40進口後,我得到一個SQL錯誤:

Exception Details: System.Data.SqlClient.SqlException: 
String or binary data would be truncated. 
The statement has been terminated. 

我相信這個錯誤意味着,我想太多的數據插入到具有最大大小限制數據庫字段。不幸的是,我不知道哪個領域是個問題。我在執行導入時運行了SQL Server Profiler,但我似乎無法看到發生錯誤的存儲過程。是否有另一種方式使用探查器或其他工具來查看確切的存儲過程以及錯誤是由什麼字段造成的?是否有任何其他提示可以獲得有關專門查找的更多信息?

哦第三方工具的樂趣...

+1

發生錯誤時,是否撤消已導入的所有博客文章?如果沒有,也許你可以知道哪個記錄失敗(最後一個記錄成功後的下一個記錄)並查看。如果導入工具具有任何類型的日誌記錄或導入記錄的計數器,那麼這將是另一個需要查看的地方。 – 2009-12-11 15:40:12

+0

@Tom H.這個帖子成功了。我已經完成了你在最後一次成功之後看帖子的內容。我確實懷疑帖子主體對於db單元來說太大了,但是body字段是'ntext',並且我沒有看到比我預期的時間長的其他可疑的XML節點。我會再看一遍,因爲這是目前我唯一已知的調試此問題的方法。感謝您的評論。 – 2009-12-11 15:43:18

回答

18

您在該異常是由於試圖太多數據塞進一個字符/二進制基於現場正確。運行跟蹤絕對應該讓你看到哪些程序/語句被拋出,如果你捕獲正確的事件之外,那些你想捕捉將包括:

  1. SQL:BatchStarting
  2. SQL:BatchCompleted
  3. SQL:StmtStarting
  4. SQL:StmtCompleted事件
  5. RPC:啓動
  6. RPC:完成
  7. SP:啓動
  8. SP:已完成
  9. SP:StmtStarting
  10. SP:StmtCompleted事件
  11. 異常

如果您知道某些它包括故障碼存儲過程,你可以用捕捉廢除#的1-4。請確保您也捕獲跟蹤中的所有相關列(如果使用Profiler工具運行跟蹤,應該是默認值)。 Exception類將包含跟蹤中的實際錯誤,這將允許您在拋出異常的同一個SPID內查看前面的語句。除了已完成的事件之外,您必須包括起始事件,因爲發生的異常會阻止跟蹤中關聯的已完成事件觸發。

如果您可以將跟蹤過濾到特定的數據庫,應用程序,主機名等,如果您位於繁忙的服務器上,它肯定會使其更易於調試,但是如果您處於空閒服務器上,則可能不需要煩擾過濾。

假設您使用Sql 2005+,跟蹤將包含一個名爲「EventSequence」的列,該列基本上是按事件觸發序列排序的遞增值。一旦你運行跟蹤並捕獲輸出,找到被激發的'Exception'事件(如果你使用的是分析器,該行將會是紅色),那麼你應該能夠簡單地找到最新的SP:StmtStarting或者SQL:StmtStarting事件發生在例外之前的同一個SPID。

這裏是我拍攝的輪廓的屏幕截圖複製與你相似的事件:

alt text http://i47.tinypic.com/1zc01mo.jpg

你可以看到紅色的例外線,線強調的是即時前面SP:StmtStarting在相同SPID的例外之前觸發的事件。如果你想找到這個語句所包含的存儲過程的一部分,請在ObjectName和/或ObjectId列中查找值。

+3

不可思議。我花了大約4天時間來解決這個問題。我添加了像你所說的其他事件,並找到了失敗的正確SP語句。我發現「主題」和「作者」字段太短,只能成功導入700多篇博文。如果可以的話,我會給你我所有的代表點。 – 2009-12-11 19:21:36

+0

太棒了,很高興幫助! – chadhoc 2009-12-11 19:51:33

+0

乍得是我的heeerooooo – Jason 2009-12-11 20:33:03

0

通過做一些愚蠢的錯誤,你會得到這個錯誤。

如果您嘗試插入類似的字符串。

String reqName="Food Non veg /n"; 

這裏/ n是culprit.Remove/n的字符串來擺脫這種錯誤的。

我希望這對一些人有幫助。

相關問題