2012-07-06 74 views
2

NTEXT与SQL Server CE的超过4000个字符中的Windows PhoneNTEXT与SQL Server CE的超过4000个字符中的Windows Phone

我有一个ntext场我的Windows Phone应用程序数据库中的一个表,我试图写一些内容到这个领域,但我得到了InvalidOperationException与消息:

字符串截断:最大= 4000,LEN = 4621

我想使用b因为我知道nvarchar不接受超过4000个字符。

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

我发现的唯一解决方案是我无法在windows phone上使用,因为它使用SqlConnectionSqlCommandSqlDbType

这里是列的声明方式:

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

有谁知道任何解决方法:

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

我与插入呢?

感谢您提前给出答案!

+1

是否CE不支持'为nvarchar(最大)'?如果它确实比'ntext'好得多。 – 2012-07-06 15:29:18

+0

不,它不支持它,至少不是在windows phone中,它只接受nvarchar(4000)作为最大长度。 – 2012-07-06 15:32:51

+1

然后我怀疑它也会在4000字节处截断ntext。 – 2012-07-06 15:39:45

回答

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(); 
       } 
      } 
     } 
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

+0

当我晚上回到家时,我会再看一眼,看看我是否做错了,可能是这样。 – 2012-07-06 16:23:46

+0

但是,您的所有信息不适用于Windows Phone ... – ErikEJ 2012-07-06 18:11:58

+0

是的,我不认为这个修补程序将与嵌入在windows phone sdk中的sqlce一起使用。 – 2012-07-06 18:22:05

相关问题