当我在SQL Server上插入~81192个字符时,nvarchar(max)字段为空
本文关键字:nvarchar max 字段 字符 SQL Server 81192个 插入 | 更新日期: 2023-09-27 18:20:30
当我尝试将新记录插入到名为ProductDetail( nvarchar(MAX))
的列中时。我插入的值约为81192个字符。然后那一栏就空了。我插入的值很小,然后它插入了,好吗?如何解决此问题?
FakeDtbDataContext dt=new FakeDtbDataContext();
...
string sql = "Insert Into SanPham(IDNhomSP,ChiTiet) Values('" + prDetail + "','" + FCK.Value + "')";
dt.ExecuteCommand(sql);
SQL版本为10.50.1600。
我调试过了,它有价值。我使用远程SQL Server运行脚本。
我插入了使用LinQ语句,LinQ本身可能会阻止注入。该列仍然为空:(
var sanPham = new SanPham
{
IDNhomSP = nhomhang,
ChiTiet = FCK.Value
};
dt.SanPhams.InsertOnSubmit(sanPham);
dt.SubmitChanges();
也许不是解决方案,但始终使用参数化查询!如果prDetail
或FCK.Value
中包含撇号,则您的sql代码将中断,更糟的是,您的代码将打开以进行sql注入:)!
类似这样的东西:
string sql = "Insert Into SanPham(IDNhomSP,ChiTiet) Values(@prDetail, @FCKValue)";
并在执行之前将prDetail和FCK.value的值作为参数添加到命令中。
如何看到该列为空?
SSMS Edit行不会显示太长的字符串,但Select将
如果你确定值为空,你能指定实体框架使用的代码生成吗(如果你不使用默认的代码生成),如果你使用代码优先,并确保SSDL是
<Property Name="ChiTiet" Type="nvarchar(max)" />
而不是
<Property Name="ChiTiet" Type="nvarchar" MaxLength="max" />