当我在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();

当我在SQL Server上插入~81192个字符时,nvarchar(max)字段为空

也许不是解决方案,但始终使用参数化查询!如果prDetailFCK.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" />