【问题标题】:Dapper - Table-Valued Parameter with string queryDapper - 带有字符串查询的表值参数
【发布时间】:2021-09-24 01:46:01
【问题描述】:

我需要在字符串查询中使用表值参数

我有以下代码

string query = "SELECT * FROM Tabla1 T1 INNER JOIN @listItems T2 ON T2.Id = T1.Id";
var results = sqlConnection.Query(query , new TableValuedParameter<string>("@listItems", "string_list_Type", valuesList));

变量valueList是一个List

执行给我一个错误:“找不到存储过程”

没有使用过程的可能的美国表值参数吗?

谢谢 问候

【问题讨论】:

  • 您发布的内容甚至无法编译。 "非泛型类型 'Dapper.TableValuedParameter' 不能与类型参数一起使用"
  • 另外,TableValuedParameter 似乎是一个internal 类,所以你不能直接创建它的新实例。
  • @Darek 他们可能使用了一种通用的 TableValuedParameter 实现。我有类似的东西并遇到完全相同的错误。

标签: dapper


【解决方案1】:

如果没有看到完整的代码示例,很难判断可能是什么问题。考虑一下,它执行得非常好:

一、TVP定义

CREATE TYPE [dbo].[TVPSTRING] AS TABLE(
    [VALUE] NVARCHAR(MAX) NULL
)

然后是 Dapper 代码示例:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using Dapper;

namespace CPTVP
{
    class Program
    {
        static void Main(string[] args)
        {
            var dt = new DataTable();
            dt.Columns.Add("StringsStringsEverywhere", typeof(string));
            foreach (int i in Enumerable.Range(0,10))
            {
                dt.Rows.Add(string.Format("{0:0000}", i));
            }

            using (var conn = new SqlConnection("Data Source=.;Initial Catalog=Scratch;Integrated Security=true;"))
            {
                Console.WriteLine(String.Join("\n", conn.Query<string>("SELECT * FROM @tvpstr", new {tvpstr=dt.AsTableValuedParameter("dbo.TVPSTRING")})));
            }
        }
    }
}

【讨论】:

  • 多列的 TVP 怎么样?
猜你喜欢
  • 2012-10-28
  • 2015-06-09
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
相关资源
最近更新 更多