Wp插入数据库异常

本文关键字:异常 数据库 插入 Wp | 更新日期: 2023-09-27 17:58:52

我的代码工作了一个多月,我的应用程序解析rss提要(http://www.whitehouse.gov/feed/blog/white-house)并将新闻插入数据库:

今天,当应用程序试图将这则新闻"2013年国情咨文第一夫人的盒子"添加到db时,我遇到了一个例外。这是我的代码:

News item = Query.instance().AddNews(channel.Guid, channel.Description, channel.Link, channel.PublishDate, channel.Title);
   public News AddNews(string guid, string description, string link, DateTime publishDate, string title)
    {
        // create a new and add it to the context
        News item = new News { Guid = guid, Description = description, Link = link, PublishDate = publishDate, Title = title };
        // add the new to the context
        db.NewsItems.InsertOnSubmit(item);
        // save changes to the database
        db.SubmitChanges();
        return item;
    }

想象一个调试,问题就出现在新闻的描述中(看起来很长),这里有一个例外:

"中发生了类型为"System.InvalidOperationException"的异常Microsoft.Phone.Data.Internal.ni.dll,在托管/本地边界类型的第一次机会异常中出现"System.InvalidOperationException"System.Data.Linq.ni.dll"

这是数据库中的列描述

private string _description;
    [Column]
    public string Description
    {
        get
        {
            return _description;
        }
        set
        {
            if (_description != value)
            {
                NotifyPropertyChanging("Description");
                _description = value;
                // Remove HTML tags. 
                _description = Regex.Replace(_description, "<[^>]+>", string.Empty);
                // Remove newline characters
                _description = _description.Replace("'r", "").Replace("'n", "");
                // Remove encoded HTML characters
                _description = HttpUtility.HtmlDecode(_description);
                //replace spaces
                _description = _description.Replace("  ", "");
                //if (!string.IsNullOrEmpty(_description) && _description.Length > 3900)
                //    _description = _description.Substring(0, 3900);
                NotifyPropertyChanged("Description");
            }
        }
    }

当我取消注释时,它起作用:

//if (!string.IsNullOrEmpty(_description) && _description.Length > 3900)
//    _description = _description.Substring(0, 3900);

Wp插入数据库异常

我们需要异常的主体来帮助您解决问题。但我认为(正如Emiliano Magliocca所说),问题是DB中的Description单元格可以容纳比您尝试插入的更少的字符。您可以将"描述"行的类型更改为varchar(max)或Text。不管怎样,只要提供尸体,我们就会帮助你。

Asnwer:

您应该将列Description的数据类型更改为Varchar(max),然后您可以随意将任何数量的文本保存到此collomn,因为Varchar(max)最多可以容纳2gb的文本。当您使用codeFirst方法生成表时,请使用如下属性:[列(TypeName="varchar(MAX)")]公共字符串描述。。。

而不是[列]公共字符串描述。。。

感谢Maris的建议,我找到了正确的解决方案,那就是:

[Column(DbType = "ntext")] 
public string Description

而不是

[Column(TypeName = "varchar(MAX)")] 
public string Description

第二个不适用于windowsphone;)