这个问题困扰了我半年之久,今天总算解决了。开始以为编辑器有问题,换了几个编辑器,问题同样存在。开始用的是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();
成功啦!
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();
成功啦!
你的这句改成sqldbtype.varchar类型,长度改成8000如果你的字符长度比这个还长,那就换成用text!
Char和Varchar都有最大长度限制。所以会截断。如果是特殊字符问题你这个方案能解决就叫奇怪了。典型的等人SQL注入。
SqlCommand cmd = new SqlCommand(str, mycon);
cmd.ExecuteNonQuery();
mycon.Close();不推荐使用这种方法,不推荐拼接SQL语句。如果是超出了数据库定义的数据类型,可以改掉那个字段的数据类型。
如果是因为特殊字符,就用cmd.Parameters.AddWithValue("@neirong",值)。
Parameters.Add("@neirong", SqlDbType.Text);