gpt4 book ai didi

c# - 使用 ExecuteSqlCommand 调用存储过程(需要未提供的参数)

转载 作者:行者123 更新时间:2023-12-04 01:58:33 25 4
gpt4 key购买 nike

我正在尝试使用 context.Database.ExecuteSqlCommand 从 EF 调用存储过程因为我的参数之一是数据表。

以下是程序的参数:

ALTER PROCEDURE [mySchema].[myProc]
@customerId INT,
@indicatorTypeId INT,
@indicators [mySchema].[IndicatorList] READONLY,
@startDate DATETIME,
@endDate DATETIME

这是调用存储过程的 c# 代码:
var indicatorsDt = new DataTable();

indicatorsDt.Columns.Add("Date", typeof(DateTime));
indicatorsDt.Columns.Add("Ongoing", typeof(int));
indicatorsDt.Columns.Add("Success", typeof(int));
indicatorsDt.Columns.Add("Warning", typeof(int));
indicatorsDt.Columns.Add("Error", typeof(int));
indicatorsDt.Columns.Add("Other", typeof(int));

var customerIdParam = new SqlParameter("customerId", SqlDbType.Int);
customerIdParam.Value = customerId;

var typeIdParam = new SqlParameter("indicatorTypeId", SqlDbType.Int);
typeIdParam.Value = typeId;

var startDateParam = new SqlParameter("startDate", SqlDbType.DateTime);
startDateParam.Value = startDate;

var endDateParam = new SqlParameter("endDate", SqlDbType.DateTime);
endDateParam.Value = endDate;

foreach (var indicator in indicators)
{
indicatorsDt.Rows.Add(indicator.Date, indicator.Ongoing,
indicator.Success, indicator.Warning,
indicator.Error, indicator.Other);
}

var tableParameter = new SqlParameter("indicators", SqlDbType.Structured);
tableParameter.Value = indicatorsDt;
tableParameter.TypeName = "MySchema.IndicatorList";

context.Database.ExecuteSqlCommand("exec MySchema.MyProc", customerIdParam, typeIdParam, tableParameter, startDateParam, endDateParam);

如您所见,提供了所有参数,它们都没有空值,但我总是得到这个 SqlException :

Procedure or function 'UpdateIndicators' expects parameter '@customerId', which was not supplied.



我无法弄清楚我错过了什么。是使用 SqlParameter错误的 ?参数在 ExecuteSqlCommand 中以相同的顺序提供即使这并不重要。

预先感谢。

最佳答案

您正在执行的 SQL 字符串中缺少参数。尝试使用名称前面的“@”创建参数,然后将 ExecuteSqlCommand 调用更改为:

context.Database.ExecuteSqlCommand("exec MySchema.MyProc @customerId, @indicatorTypeId, @indicators, @startDate, @endDate", customerIdParam, typeIdParam, tableParameter, startDateParam, endDateParam);

关于c# - 使用 ExecuteSqlCommand 调用存储过程(需要未提供的参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914166/

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