在Windows Phone中的SQL Server CE中具有超过4000个字符的NTEXT

时间:2012-07-06 15:27:27

标签: c# windows-phone-7 sql-server-ce ntext

在Windows Phone中的SQL Server CE中具有超过4000个字符的NTEXT

我的Windows Phone应用中有一个数据库,其中一个表中有一个ntext字段,我正在尝试将一些内容写入此字段,但我收到一条InvalidOperationException的消息:

  

字符串截断:max = 4000,len = 4621

我正在尝试使用ntext,因为我知道nvarchar不接受超过4000个字符。

我已经搜索了一个解决方案,但我找不到任何解决方案。

我找到的唯一解决方案是我无法在Windows手机上使用,因为它使用SqlConnectionSqlCommand SqlDbType

以下是声明列的方式:

    private string _content;
    [Column(DbType="ntext")]
    public string Content
    {
        get
        {
            return _content;
        }
        set
        {
            if (value != _content)
            {
                _content = value;
                NotifyChange(o => o.Content);
            }
        }
    }

我正在插入:

cn.Articles.InsertAllOnSubmit(articlesToSave); 
cn.SubmitChanges();

有没有人知道任何解决方法?

提前感谢您的答案!!

2 个答案:

答案 0 :(得分:3)

我认为实际数据库文件中的列不是ntext,无论出于何种原因。

这对我来说很好用:

    using (NorthwindContext ctx = new NorthwindContext(NorthwindContext.ConnectionString))
    {
        ctx.DeleteDatabase();
        ctx.CreateDatabase();
        var category = new Categories();
        category.CategoryName = "Test";
        category.Description = new string('x', 6666);
        ctx.Categories.InsertOnSubmit(category);
        ctx.SubmitChanges();

        var testCat = ctx.Categories.First();
        if (testCat.Description.Length == 6666)
        {
            MessageBox.Show("Works on my Windows Phone");                
        }
    }

列声明:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NText", UpdateCheck=UpdateCheck.Never)]
        public string Description
        {
            get
            {
                return this._Description;
            }
            set
            {
                if ((this._Description != value))
                {
                    this.OnDescriptionChanging(value);
                    this.SendPropertyChanging();
                    this._Description = value;
                    this.SendPropertyChanged("Description");
                    this.OnDescriptionChanged();
                }
            }
        }

答案 1 :(得分:2)

ntext支持超过5亿个字符,所以你遇到的问题与它无关。见http://msdn.microsoft.com/en-us/library/ms172424.aspx

您可能需要查看以下内容:http://msdn.microsoft.com/en-us/library/hh202872(v=vs.92).aspx

列表中没有提到ntext,但确实提到了文本。我猜你可能需要提供自己的自定义格式化程序。

<强>更新

请查看以下修补程序。它涵盖了使用linq,ce和ntext数据类型时的某些情况。看起来像没有修复,格式化程序强迫ntext成为nvarchar(4000)。 http://support.microsoft.com/kb/958478