将异常ex存储为db中的字符串?

时间:2014-02-06 15:58:02

标签: c# asp.net asp.net-mvc

public static bool download()
{
    try
    {
        //perform up dates, if successful
        UpdateActionResultTable("DownloadPOS", "N/A - No Sales file to upload", "Success", "N/A");
        return true;
    }
    catch (Exeption ex)
    {
        UpdateActionResultTable("DownloadPOS", "N/A - No Sales file to upload", "Fail", ex.ToString());
        return false;
    }
}

如果不成功,我想将异常存储为db中的字符串。这是来自UpdateActionResultTable函数,但它抛出错误:

  

字符串或二进制数据将被截断。

     

声明已经终止。

知道为什么?

在更新成功时工作正常,所以我唯一的猜测是因为异常?

public static void UpdateActionResultTable(string actionCalled, string salesFile, string result, string reason)
{
    EPOSEntities db = new EPOSEntities();

    ActionResult action = new ActionResult()
    {
         Action = actionCalled,
         File = salesFile,
         TimeStamp =  DateTime.Now,
         Result = result,
         Reason = reason                  
    };

    db.AddToActionResults(action);
    db.SaveChanges();
}

3 个答案:

答案 0 :(得分:1)

这意味着您的最终参数太长:

ex.ToString()

无法写入数据库,因为您要写入的列的大小限制较小。

因此,要么让你写的字符串更短(过滤掉不必要的数据或仅删除第一个 n 字符),要么使你在字母表中写入字符串的字段更大。

答案 1 :(得分:1)

您在数据库中存储异常字符串值的列不足以容纳您提供的异常字符串

我会将数据库中的该列更改为NVARCHAR(MAX)。为此,如果您使用的是SQL Server,只需在数据库上运行以下SQL脚本。

SQL:

ALTER TABLE table_name
ALTER COLUMN column_name NVARCHAR(MAX)

答案 2 :(得分:0)

您的数据库字段看起来不够大,无法存储异常字符串

N / A只需要3个字符,但异常可能会非常大。因此,如果你的字段是varchar(50),那么“N / A”就没问题,因为该字段最多可以包含50个字符。但是存储为字符串的异常会更大