使用Dapper获取nvarchar(Max)将返回一个修剪为4000个字符的字符串。这种行为能改变吗? [英] Using Dapper to get nvarchar(max) returns a string trimmed to 4000 characters. Can this behaviour be changed?

查看:0
本文介绍了使用Dapper获取nvarchar(Max)将返回一个修剪为4000个字符的字符串。这种行为能改变吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个SQL Server数据表,其中一个列中存储了一个JSON字符串。JSON字符串是序列化的.Net对象,数据通常超过4000个字符。

我有一个简单的存储过程,用于检索数据:

    @StageID int,
    @Description varchar(250) = null OUTPUT,
    @Program nvarchar(max) = null OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    SELECT @Program = StageProgram, @Description = Description 
    FROM StageProgram 
    WHERE StageID = @StageID;

    RETURN 0;
END 

我对列使用数据类型nvarchar(max)。当我将.Net对象序列化为JSON并使用Dapper将其写入数据库时,我发现完整的字符串正确地存储在数据库中。

但是,当我尝试检索该字符串时,我发现它被修剪为4000个字符,丢弃了其余数据。

相关代码如下:

DynamicParameters p = new DynamicParameters();

p.Add("@StageID", Properties.Settings.Default.StageID, DbType.Int32, ParameterDirection.Input);
p.Add("@Description", "", DbType.String, direction: ParameterDirection.Output);
p.Add("@Program", "", DbType.String, direction: ParameterDirection.Output);
p.Add("@ReturnValue", DbType.Int32, direction: ParameterDirection.ReturnValue);               

try
{
     int stageID = Properties.Settings.Default.StageID;
     connection.Execute(sql, p, commandType: CommandType.StoredProcedure);                 
     json = p.Get<string>("@Program");
     int r = p.Get<int>("@ReturnValue");                    
}

当我运行此命令时,字符串json被修剪为4000个字符。

如果我使用内置的.Net SQL Server连接来检索它(为简单起见,使用查询而不是存储过程),则正确地返回完整数据:

SqlCommand getProgram = new SqlCommand("SELECT StageProgram FROM StageProgram WHERE StageID = 1;");
getProgram.Connection = connection;
string json = Convert.ToString(getProgram.ExecuteScalar());

有经验的Dapper用户能否为此行为提供解释?

可以更改吗?

推荐答案

4000个字符(当前)the default length for a DBString in Dapper

要获取全文,只需设置Size参数:

p.Add("@Program", "", DbType.String, direction: ParameterDirection.Output, size:int.MaxValue);

这篇关于使用Dapper获取nvarchar(Max)将返回一个修剪为4000个字符的字符串。这种行为能改变吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆