这个问题困扰了我半年之久,今天总算解决了。开始以为编辑器有问题,换了几个编辑器,问题同样存在。开始用的是access数据库,后来转为sql数据库,数据类型从“备注”改为“TEXT”,问题同样存在。后来检查编辑器的内容,插入数据库之前是完整的,插入之后就被截断了。查看数据表,数据也是被截断的,跟读出的内容一致。在查询分析器里运行insert语句,显示错误“字符串被截断”。不停地实验,偶尔一次使用insert插入Server.htmlencode后的数据成功。但是运行网页使用sqlcomand插入仍然不成功,最后将c#插入语句进行修改成功。c#插入语句开始这样写:
    str = "insert into wenzhang (neirong) values      (@neirong)";
                SqlCommand cmd = new SqlCommand(str, mycon);
                cmd.Parameters.Add(new SqlParameter("@neirong", SqlDbType.Char, 2000));
                cmd.Parameters["@neirong"].Value = ss;
                cmd.ExecuteNonQuery();
                mycon.Close();
改为:
str = "insert into wenzhang (neirong) values ('" + neirong + "')";
            SqlCommand cmd = new SqlCommand(str, mycon);
            cmd.ExecuteNonQuery();
            mycon.Close();
        
                   成功啦!        

解决方案 »

  1.   

    cmd.Parameters.Add(new SqlParameter("@neirong", SqlDbType.Char, 2000));你这里干嘛要指定大小呢?
      

  2.   

    cmd.Parameters.Add(new SqlParameter("@neirong", SqlDbType.Char, 2000));
    你的这句改成sqldbtype.varchar类型,长度改成8000如果你的字符长度比这个还长,那就换成用text!
      

  3.   

    恭喜恭喜。不知道你截断是因为长度问题还是特殊字符问题。如果是长度问题你的确是可以解决了。cmd.Parameters.Add(new SqlParameter("@neirong", SqlDbType.Char, 2000));
    Char和Varchar都有最大长度限制。所以会截断。如果是特殊字符问题你这个方案能解决就叫奇怪了。典型的等人SQL注入。
      

  4.   

    你这个方法肯定不行。如果内容有单引号, 就出错了。cmd.Parameters.Add(new SqlParameter("@neirong", DbType.AnsiString));
      

  5.   

    str = "insert into wenzhang (neirong) values ('" + neirong + "')";
    SqlCommand cmd = new SqlCommand(str, mycon);
    cmd.ExecuteNonQuery();
    mycon.Close();不推荐使用这种方法,不推荐拼接SQL语句。如果是超出了数据库定义的数据类型,可以改掉那个字段的数据类型。
    如果是因为特殊字符,就用cmd.Parameters.AddWithValue("@neirong",值)。
      

  6.   

    str = "insert into wenzhang (neirong) values (@neirong)";
    Parameters.Add("@neirong", SqlDbType.Text);