使用 Dapper,如何将 sql 类型的值作为参数传递?

2023-12-13

我正在尝试使用 dapper 并将我在此处使用 DDL 定义的整数列表传递给存储过程

CREATE TYPE [dbo].[BrandIDSet] AS TABLE ([BrandID] INT NULL);

我创建了这个存储过程:

CREATE PROCEDURE dbo.usp_getFilteredCatalogItems 
    @BrandIDSet [dbo].[BrandIDSet] READONLY

并尝试在 C# 代码中将该参数的值传递为

public async Task<PaginatedCatalogItemsVM> GetFilteredCatalogItems(int pageSize, int pageNumber, List<int> brandIDSet)
{
     ..
     string storedProcName = "dbo.usp_getFilteredCatalogItems";
     paginatedItemsVM.CatalogItemResults = await connection.QueryAsync<CatalogItemVM>(storedProcName, new { BrandIDSet = brandIDSet }, commandType: CommandType.StoredProcedure);

然而,dapper 似乎并没有按预期转换列表。使用上面的代码,将导致执行以下 SQL

exec dbo.usp_getFilteredCatalogItems @BrandIDSet1=1

这是不对的,因为 BrandIDSet1 不是参数的名称。精氨酸。 因此,结果是

SqlException:@BrandIDSet1 不是过程 usp_getFilteredCatalogItems 的参数。

如何将类型转换为正确的 SQL?


您可以传递 DataTable 以获得正确的结果。您可以尝试下面的代码;

var dt = new DataTable();
dt.Columns.Add(new DataColumn("BrandID", typeof(int)));
foreach (var id in brandIDSet)
{
    var row = dt.NewRow();
    row["BrandId"] = id;
    dt.Rows.Add(row);
}

string storedProcName = "dbo.usp_getFilteredCatalogItems";
paginatedItemsVM.CatalogItemResults = await connection.QueryAsync<CatalogItemVM>(storedProcName, new { BrandIDSet = dt }, commandType: CommandType.StoredProcedure);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Dapper,如何将 sql 类型的值作为参数传递? 的相关文章

随机推荐

  • 在Python中使用“十进制”

    有人可以解释一下下面发生了什么吗 我使用Python 3 3 1 gt gt gt Decimal 0 1 Decimal 0 1 Decimal 0 1 Decimal 0 3 Decimal 0 0 2 gt gt gt Decimal
  • let 关键字和闭包?

    我正在学习ES6的新特性 我有一个关于 let 的问题 它涉及这段代码 for let i 0 i lt 45 i var div document createElement div div onclick function alert
  • 单元测试 反模式目录

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 反模式 必须至少存在两个关键元素才能正式区分实际的反模式与简单的坏习惯 坏实践或坏主意 一些重复的行动 过程或结构模式 最初看起来
  • Android Oreo:保持已启动的后台服务处于活动状态而不将其设置为前台(但有通知)?

    我正在开发一个媒体应用程序 我想知道如何保留我的应用程序在 Oreo 之前的一些旧行为 例如 即使服务不再设置为前台 也可以让通知和服务 用于播放 挂在那里 当播放开始时 我们调用 startService MediaPlaybackSer
  • c# 比较两个文本文件并生成一个有差异的新文件

    我正在寻找快速比较 2 个文本文件 15000 行 并获取两个文件中不同的输出字符串的最佳方法 第一个是旧库存 新库存是当前库存 我想生成第三个 其中包含 file2 和 file1 之间不同的字符串 这 2 个文件中 95 是相似的 非常
  • 注册。 delphi中Android应用程序的大小

    当我通过 Delphi Xe7 生成 Android 应用程序时 App Name Apk 文件为 6 MB 当我在移动设备中安装时 应用程序大小为 25 MB 请向我提供是否有任何其他设置可以减小应用程序大小的信息 在代码中我只有单一形式
  • 将 rxGlm 转换为 GLM 时出错

    我在将 rxGlm 模型转换为普通 glm 模型时遇到问题 每次我尝试隐藏我的模型时 都会遇到相同的错误 Error in qr lm object lm object does not have a proper qr component
  • 数据网格视图标题网格颜色

    这是一个 VB NET 应用程序 我们在数据网格视图中显示 SQL 语句的输出 我正在使用 NET 2005 我们需要使网格控件上的标题分隔符的颜色与窗体上的 GridColor 的颜色相同 我们尝试查看 DataGridView 控件的所
  • 如何在 NSDictionary 中 POST NSDictionaries 的 NSArray 而不会出现问题?

    我确实知道如何做到这一点 这相当简单 问题是它不起作用 这是我用来发布数据的函数 void updateWebsitesUsingParameters NSDictionary parameters AFHTTPRequestOperati
  • Sitecore:打开 HTML 缓存会阻止回发行为

    我有一个带有 ASP 下拉列表的 sitecore 页面 表单上的数据是从下拉列表中选定的值填充的 当下拉列表中的所选项目发生更改时 会触发回发 在回发中 新选定的项目将添加到查询字符串中 并且用户将被重定向 为了可链接性 我最近启用了 H
  • Python Tkinter 使用 PIL 将画布保存为图像

    我有这段代码 可以让用户在画布上绘图并将其保存为jpeg file 正如中提到的这个帖子 我尝试使用 PIL 在画布上和内存中并行绘制 以便我可以将其保存为jpeg代替postscript 它似乎一直有效 直到我发现我用 PIL 保存的一些
  • docx4j 查找和替换

    我有带有一些占位符的 docx 文档 现在我应该用其他内容替换它们并保存新的 docx 文档 我开始于docx4j并找到了这个方法 public static List getAllElementFromObject Object obj
  • 通过转换器绑定每个按钮,使背景颜色变亮

    我想在单击时使按钮背景变亮 所以我做了以下事情
  • 如何修复错误 E0277:不满足特征绑定 `[usize]: std::marker::Sized` ?

    我正在尝试将数组传递给函数 fn my func xs usize gt usize 0 fn main let arr 329 457 657 let res my func inp 我收到错误 error E0277 the trait
  • 如何从 C# 以编程方式控制 Win7 中的麦克风和麦克风增强设置?

    Windows 7 有一些新的音频设置 我无法从我的 C 应用程序中控制这些设置 具体来说 在输入 麦克风 属性中 有一个包含麦克风和麦克风增强滑块的 级别 选项卡 以及一个麦克风静音切换 复选框 我需要以编程方式确保麦克风没有静音 但尚未
  • Grails + GORM:GORM 中默认的 equals() 实现是什么?

    当我做domainObj1 domainObj2Grails 中的对象是按 ID 进行比较的吗 如果不是 它们如何比较 首先 您需要了解 GORM Grails 并没有做任何特别的事情equals 除非你自己实现equals 在您的域类上
  • 摇动动画(3d版)

    我想在错误上使用此动画 如图所示here 如何在wpf中实现这一点 我感觉这应该是多个转换的组合 组合 但是具体是哪些转换以及如何转换 这是一个初学者 mcve或称之为 我的尝试 它很丑陋 甚至与我想要的不接近
  • 将操作添加到操作栏面板

    我想向操作栏添加一个操作 但它在我的操作栏中显示为下拉列表 如何向操作栏添加按钮 我的代码是 menu menu
  • 为什么Python中的像素值会自动变化?

    我正在 VideoCapture 的帮助下从视频中提取帧 提取第一帧 借助 PIL 将帧转换为图像 打印位置 1 1 处的前一个像素值 打印新创建图像的位置 1 1 处的像素值 谁能解释为什么 提取帧的函数 import cv2 from
  • 使用 Dapper,如何将 sql 类型的值作为参数传递?

    我正在尝试使用 dapper 并将我在此处使用 DDL 定义的整数列表传递给存储过程 CREATE TYPE dbo BrandIDSet AS TABLE BrandID INT NULL 我创建了这个存储过程 CREATE PROCED