SqlException 當前命令發生了嚴重錯誤 應放棄任何可能產生的結果

weixin_33816946發表於2019-01-08

今天在資訊釋出功能時出現了一個怪異的錯誤(時而出錯,時而不會):

System.Data.SqlClient.SqlException: 當前命令發生了嚴重錯誤。應放棄任何可能產生的結果。

  >>具體的錯誤提示如下所示:

System.Data.SqlClient.SqlException: 當前命令發生了嚴重錯誤。應放棄任何可能產生的結果。
當前命令發生了嚴重錯誤。應放棄任何可能產生的結果。
   在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   在 Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteNonQuery(DbCommand command)
   在 Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command)
   在 Core.DAL.Article.Update(Article model) 位置 E:\Works\Portal\Core\DAL\Article.cs:行號 149
   在 Core.BLL.Article.Update(Article model) 位置 E:\Works\Portal\Core\BLL\Article.cs:行號 37
   在 LWDocService.Portal.Admin.ArticleEdit.btnSubmit_Click(Object sender, EventArgs e) 位置 E:\Works\Portal\Admin\ArticleEdit.aspx.cs:行號 86
   在 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
   在 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
   在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

   >>具體經驗判斷應該是欄位長度的問題,但經網上搜尋有些說是沒有安裝SQL Server 2000 SP1補丁導致的,屬於SQL Server的一個bug,但我將資料庫附加到MS SQL Server 2005然後再執行時還是出現錯誤了,而這次的錯誤提示卻與SQL Server 2000不同:

System.Data.SqlClient.SqlException: 傳入的表格格式資料流(TDS)遠端過程呼叫(RPC)協議流不正確。引數 15 ("@Content"): 資料型別 0xA7 的資料長度或後設資料長度無效。

   >>從錯誤的提示上看應該可以比較直觀地判斷出是欄位Content的長度問題,而為什麼SQL Server 2000與SQL Server 2005不同的資料庫版本竟會有不同的錯誤提示呢?大家有興趣或知道的,請告知 :),在這裡老林只想解決出現的問題.....

 

   >>好了,知道問題的根源解決就不困難了,

  原來的程式碼:

db.AddInParameter(dbCommand, "Content", DbType.AnsiString, model.Content);

 改為現在的程式碼:

 db.AddInParameter(dbCommand, "Content", DbType.String, model.Content);

    >>那麼DbType.AnsiString與DbType.String有任何區別呢?

經查MSDN資料,https://msdn.microsoft.com/zh-cn/library/system.data.dbtype%28VS.80%29.aspx?f=255&MSPPError=-2147217396:

AnsiString——非 Unicode 字元的可變長度流,範圍在 1 到 8,000 個字元之間。

String——表示 Unicode 字串的型別。

 

   >>大家看到了嗎?AnsiString最大的範圍是在8000個字元之內,如果你的文章內容太多那將可能出錯誤。

  

 原文連結:SqlException 當前命令發生了嚴重錯誤 應放棄任何可能產生的結果

    >>小廣告: 八爪魚招標網 大家多給意見哦

  

 

相關文章