做了一个文章系统,Content字段的数据类型设为了ntext(16),添加文章时使用了FreeTextBox,但是最后提交到数据库时,只取到了<P align=center>,没有正常获取提交的数据,请高手解答.

解决方案 »

  1.   

    Text in Row 数据
    Microsoft&reg; SQL Server&#8482; 2000 支持在数据行中存储小型到中等的 text、ntext 和 image 值。该功能最适于这样的表:text、ntext 和 image 列中的数据通常读取或写入一个单元,并且大多数引用该表的语句都使用 text、ntext 和 image 数据。除非指定 text in row 选项,否则 text、ntext 或 image 字符串为存储在数据行外的大型(最大 2GB)字符串或二进制字符串。数据行只包括一个 16 字节的文本指针,该指针指向一个树的根节点,该树由映射存储串片段的页的内部指针构成。有关 text、ntext 或 image 字符串存储的更多信息,请参见 text、ntext 和 image 数据。可为包含 text、ntext 或 image 列的表设置 text in row 选项。还可以指定 text in row 选项限制,从 24 到 7,000 字节。如果设置了该选项,则在下列情况下,text、ntext 或 image 字符串直接存储在数据行中: 字符串的长度比指定的长度限制短。
    数据行中有足够的可用空间容纳字符串。 
    当 text、ntext 或 image 串被存储在数据行时,SQL Server 就无须访问单独的页或页的集合来读写这些串。这使得读写 text、ntext 或 image 这些行中的串就象读写 varchar、 nvarchar 或 varbinary 串一样快。如果 text、ntext 或 image 字符串的长度比 text in row 选项的限制或行中的可用空间长,则本应存储在指针树根节点中的指针集将存储在行中。下列情况下,将指针存储在行中: 存储指针所需的空间量比 text in row 选项限制指定的少。
    数据行中有足够的可用空间容纳指针。 
    当指针从根节点移至行本身时,SQL Server 无须使用根节点。这可在读取或写入字符串时消除页访问,从而加快处理速度。当使用根节点时,它们被存储为 text、ntext 或 image 页中的一个字符串片段,并且可最多容纳五个内部指针。SQL Server 的行需要 72 字节的空间存储行内字符串的五个指针。如果当 text in row 选项打开时行中没有足够的空间容纳指针,SQL Server 必须分配一个 8-K 页容纳它们。不应将 text in row 限制设置为小于 72 字节,除非确定存储在列中的所有字符串都较短或超过 3 MB。当 text、ntext 或 image 字符串存储在行中时,它们的存储类似于长度可变的字符串。例如,如果 text in row 选项的限制为 500 字节,则在行中存储一个 200 字节的字符串时,SQL Server 将只使用存储该字符串所需的字节数。如果插入的字符串比 500 字节长,因而指针存储在行中,则 SQL Server 只使用足够容纳指针的空间,而不是全部 500 字节。如果某个表有多个 text、ntext 或 image 列,则当尝试插入多个 text、ntext 或 image 字符串时,SQL Server 将按基于列 ID 的顺序给这些字符串逐个分配空间。例如,假设有一个包含四个 text 列的表,并且将 text in row 选项的限制设置为 1000。然后插入某行,而该行中每个 text 列都为 900 字节的字符串,并且有足够的数据用于表中的所有其它列,因此在行中只有 3,000 字节的可用空间容纳 text 字符串。前三个 text 列的字符串存储在行中,使用 3,000 可用字节中的 2,700 字节。第四个 text 列的字符串不存储在行中,但根节点的指针存储在行中。启用和禁用 text in row 选项
    可使用 sp_tableoption 为表启用 text in row 选项:sp_tableoption N'MyTable', 'text in row', 'ON'或者,可以为可在数据行中存储的 text、ntext 和 image 字符串长度指定从 24 到 7.000 字节的最大限制:sp_tableoption N'MyTable', 'text in row', '1000'如果指定的是 on 而不是一个特定的限制,则此限制的默认值为 256 字节。该默认值使您得以从 text in row 选项中获得最多的性能收益。尽管在通常情况下,不应将此值设为低于 72,但也不应把此值设得过高,特别是对那些大多数语句都不引用 text、ntext 和 image 列的表或者具有多个 text、ntext 和 image 列的表。如果设置了较大的 text in row 限制,且行本身存储了许多字符串,则可以显著减少存储在每页上的数据行数。如果大多数引用表的语句不访问 text、ntext 或 image 列,则减少页中的行数会增加处理查询时必须读取的页数。减少每页上的行数会增加索引及页的大小,优化器找不到可用的索引时可能需要扫描这些索引和页。text in row 限制的默认值 256 足以确保小型字符串和根文本指针存储在行中,同时不会使每页上的行减少得太多以至影响性能。也可以使用 sp_tableoption 关闭此选项,这可以通过指定 off 或 0 选项值来实现:sp_tableoption N'MyTable', 'text in row', 'OFF'
      

  2.   

    其实就是sql数据库 , 每行数据只能存放8k左右(包括所有的列),ntext 虽然能存放2g大小,所以要设定text in row
      

  3.   

    SqlConnection con=DB.CreatCon();
    con.Open();
    SqlCommand cmd=new SqlCommand("insert into Article(Title,Keyword,Author,Copyfrom,Hits,Createtime,Content) values(@Title,@Keyword,@Author,@Copyfrom,0,@Createtime,@Content)",con); SqlParameter TitlePm=new SqlParameter("@Title",SqlDbType.VarChar,500);
    TitlePm.Value=tbxTitle.Text;
    cmd.Parameters.Add(TitlePm); SqlParameter KeywordPm=new SqlParameter("@Keyword",SqlDbType.VarChar,500);
    KeywordPm.Value=tbxKeyword.Text;
    cmd.Parameters.Add(KeywordPm); SqlParameter AuthorPm=new SqlParameter("@Author",SqlDbType.VarChar,500);
    AuthorPm.Value=tbxAthor.Text;
    cmd.Parameters.Add(AuthorPm); SqlParameter CopyfromPm=new SqlParameter("@Copyfrom",SqlDbType.VarChar,500);
    CopyfromPm.Value=tbxCopyfrom.Text;
    cmd.Parameters.Add(CopyfromPm); SqlParameter CreatetimePm=new SqlParameter("@Createtime",SqlDbType.VarChar,500);
    CreatetimePm.Value=System.DateTime.Now;
    cmd.Parameters.Add(CreatetimePm);

    SqlParameter ContentPm=new SqlParameter("@Content",SqlDbType.NText,16);
    ContentPm.Value=ftbContent.Text;
    cmd.Parameters.Add(ContentPm);
    cmd.ExecuteNonQuery();
    con.Close();以上是向数据库提交的代码,我是需要改页面代码还是改SQL数据库的设置?具体怎么改呀?
      

  4.   

    ntext(16)则只能保存16个字节的数据,字符串超出了就截断。
      

  5.   

    我看到很多的文章系统都是用ntext做为文章正方的数据类型,使用都挺正常.
    难道我是数据类型选择错了吗?
      

  6.   

    ntext(16)则只能保存16个字节的数据,字符串超出了就截断。
    =======
    瞎说,ntext(16) 代表一个指针,
    下面引自 sql helptext、ntext 和 image 数据
    各个 text、ntext 和 image 值最大为 2 GB,否则将太长以致不能存储在单个数据行中。在 Microsoft&reg; SQL Server&#8482; 2000 中,小的 text、ntext 或 image 值可以直接存储在行中,由于太大而不能存放在行中的值则存储在页集合内,该页集合与容纳行的其它列的数据的页分开存储。管理员使用 sp_tableoption 中的 text in row 选项,指定小的 text、ntext 或 image 值是否直接存储在行中: 当 text in row 是 OFF 时,SQL Server 2000 的 ntext、text 和 image 行为与 SQL Server 7.0 版相同。对于每个 text、ntext 或 image 值,存储在数据行内的所有内容是一个 16 字节的指针。对于每一行,该指针指向 text、ntext 或 image 数据的位置。包含多个 text、ntext 或 image 列的行对每个 text、ntext或 image 列均有一个指针。
    当 text in row 是 ON 时,SQL Server 2000 在数据行中存储小的 text、ntext 和 image 值。只有不能存储在行中的 text、ntext 或 image 值存储在单独的页集合中
      

  7.   

    hdt(倦怠) 你说的text in row 怎么设置呀?
      

  8.   

    sp_tableoption N'MyTable', 'text in row', 'OFF'
      

  9.   

    sp_tableoption N'Article', 'text in row', 'OFF'
    是这样吗?
      

  10.   

    问题已经解决.谢谢大家.
    ============================
    SqlParameter ContentPm=new SqlParameter("@Content",SqlDbType.NText,16);
    将参数中的16去掉即可解决.