小编Q''*_*Q''的帖子

使用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 
Run Code Online (Sandbox Code Playgroud)

我正在使用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 = …
Run Code Online (Sandbox Code Playgroud)

c# sql-server json dapper

6
推荐指数
1
解决办法
976
查看次数

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

除其他外,存储过程返回 varbinary(max) 作为输出。我不明白如何使用 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 {}

        }
Run Code Online (Sandbox Code Playgroud)

更新:

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

DynamicParameters p = new DynamicParameters();
MemoryStream b = new MemoryStream();

p.Add("@OpID", id, DbType.Int32, ParameterDirection.Input); …
Run Code Online (Sandbox Code Playgroud)

dapper dynamicparameters

5
推荐指数
1
解决办法
2929
查看次数

如何将 WPF 控件文本绑定到布尔值,并决定 xaml 中的文本

我在用于登录目的的 WPF 应用程序中有一个按钮控件。该按钮具有双重用途:注销时,应显示“登录”文本。登录时,应显示“注销”文本。

我可以通过数据绑定到视图模型中的适当字符串属性来做到这一点。但是,如果我可以简单地将数据绑定到“loggedIn”布尔值(注销时为假,登录时为真),然后决定在视图中的按钮上显示什么文本,那就更好了。

这可能吗?

c# wpf mvvm

4
推荐指数
1
解决办法
2161
查看次数

标签 统计

c# ×2

dapper ×2

dynamicparameters ×1

json ×1

mvvm ×1

sql-server ×1

wpf ×1