gpt4 book ai didi

c# - 通过 Entity Framework 将整数数组传递给 T-SQL 存储过程

转载 作者:太空狗 更新时间:2023-10-30 00:17:58 25 4
gpt4 key购买 nike

我已经阅读了很多帖子并认为我理解了这些概念,但是我的小整数数组无法从 C#/EF 模块传递到 SQL Server 存储过程。希望其他人能发现问题。

我正在使用 EF6、4.5 .Net Framework、SQL Server 2014

在数据库中我创建了这些类型/过程:

CREATE TYPE [dbo].[IntsTTV] AS TABLE(
[Id] [int] NOT NULL
)

请注意,名为“Person”的表包含“Id”(int) 和“LastName”(nvarchar) 列,并且包含数据。

CREATE PROCEDURE [dbo].[GetUsers]
@UserIds dbo.IntsTTV READONLY
AS
BEGIN
SELECT p.LastName
FROM [dbo].[Person] p
INNER JOIN @UserIds ids On p.Id = ids.Id;
END

//C#代码

SqlMetaData[] columns = new SqlMetaData[1];
columns[0] = new SqlMetaData("Id", SqlDbType.Int);

SqlDataRecord row = new SqlDataRecord(columns);
row.SetInt32(0, 1); // Id of '1' is valid for the Person table

SqlDataRecord[] table = new SqlDataRecord[1];
table[0] = row;

SqlParameter parameter = new SqlParameter();
parameter.SqlDbType = SqlDbType.Structured;
parameter.ParameterName = "@UserIds";
parameter.TypeName = "dbo.IntsTTV";
parameter.Direction = ParameterDirection.Input;
parameter.Value = table;

SqlParameter[] parameters = new SqlParameter[1];
parameters[0] = parameter;


var res = _db.Database.SqlQuery<string>("GetUsers", parameters).ToList();

该代码确实成功地调用了 proc,如果我对 proc 进行硬编码以简单地返回 LastName 的选择,那么 C# 代码确实会收到它。这告诉我什么在工作。

如果我从其他 T-SQL 代码调用 proc,传入准备好的 int 表值参数 (IntsTTV),它会起作用。

在过程中,如果我选择传递的参数表的行数,当从 C# 代码调用时我得到零,但当从 T-SQL 代码调用时我得到正确的计数。

请问我错过了什么?

最佳答案

这就是我使用表值参数调用存储过程的方式。主要区别在于我使用了 DataTable 参数。

我记得参数名称绑定(bind)有问题,但我不记得它们到底是什么了。这解释了我在过程调用的语法中所做的更改。我知道这个应该有用。

var dataTable = new DataTable();
dataTable.TableName = "dbo.IntsTTV";
dataTable.Columns.Add("Id", typeof(int));
dataTable.Rows.Add(1); // Id of '1' is valid for the Person table

SqlParameter parameter = new SqlParameter("UserIds", SqlDbType.Structured);
parameter.TypeName = dataTable.TableName;
parameter.Value = dataTable;

var res = _db.Database.SqlQuery<string>("EXEC GetUsers @UserIds", parameter).ToList();

关于c# - 通过 Entity Framework 将整数数组传递给 T-SQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710132/

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