我有一个 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 用户是否能够对此行为提供解释?
可以改变吗?