gpt4 book ai didi

c# - 使用 Dapper 获取 nvarchar(max) 返回一个被修剪为 4000 个字符的字符串。这种行为可以改变吗?

转载 作者:太空狗 更新时间:2023-10-29 21:16:07 28 4
gpt4 key购买 nike

我有一个 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 :

image of code from the above link

要获取全文,只需要设置size参数即可:

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

关于c# - 使用 Dapper 获取 nvarchar(max) 返回一个被修剪为 4000 个字符的字符串。这种行为可以改变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54095648/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com