gpt4 book ai didi

dapper - 对于 varbinary 数据类型,DynamicParameters (Dapper) 的正确用法是什么?

转载 作者:行者123 更新时间:2023-12-04 13:42:40 34 4
gpt4 key购买 nike

除其他外,存储过程返回 varbinary(max) 作为 OUTPUT。我无法理解如何使用 Dapper 访问此信息。

下面是一些说明问题的简化示例代码。我向 StoredProcedure 提供了一些参数,我希望得到一张照片,该照片在 SQL Server 上存储为 varbinary(max)。

varbinary 没有 DbType。我尝试使用 DbType.Binary 但这会导致 Dapper 出现异常。如果我去掉照片参数,我希望恢复的所有其他参数(为了简洁起见从样本中删除)都在起作用。所以唯一的问题是检索 varbinary 数据。

实现这一目标的正确方法是什么?

using (var connection = new System.Data.SqlClient.SqlConnection(HelperClassesBJH.HelperMethods.ConString("ProductionLocal")))
{
connection.Open();

DynamicParameters p = new DynamicParameters();

p.Add("@OpID", id, DbType.Int32, ParameterDirection.Input);
p.Add("@StageID", Properties.Settings.Default.StageID, DbType.Int32, ParameterDirection.Input);
p.Add("@Photo", dbType: DbType.Binary, direction: ParameterDirection.Output);

try
{
connection.Execute(sql, p, commandType: CommandType.StoredProcedure);

op.Photo = p.Get<byte[]>("@Photo");
}
catch {}

}

更新:

我发现我必须在 DynamicParameters 构造函数中提供“value”参数。这避免了我得到的异常。我无法理解为什么我需要提供一个值,因为参数是一个输出并且我提供的值没有被使用。这是修改后的代码:
DynamicParameters p = new DynamicParameters();
MemoryStream b = new MemoryStream();

p.Add("@OpID", id, DbType.Int32, ParameterDirection.Input);
p.Add("@StageID", Properties.Settings.Default.StageID, DbType.Int32, ParameterDirection.Input);
p.Add("@Photo", b, DbType.Binary, direction: ParameterDirection.Output);

try
{
connection.Execute(sql, p, commandType: CommandType.StoredProcedure);

op.Photo = p.Get<byte[]>("@Photo");
}
catch {}

这导致检索包含预期图像数据的字节数组。

最佳答案

你可以试试:

p.Add("@Photo", dbType: DbType.Binary, direction: ParameterDirection.Output, size: -1);

它似乎在本地对我有用,这就是 varchar(max)nvarchar(max)被映射(除了分别为 DbType.AnsiStringDbType.String ),所以它会是一致的。

关于dapper - 对于 varbinary 数据类型,DynamicParameters (Dapper) 的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54557416/

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