У меня есть таблица данных 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 объяснить такое поведение?
Можно ли это изменить?