如何解决EF Core ExecuteReader或ExecuteScalar-存储过程参数错误,但没有异常
我正在使用 .Net EF Core 3.1.5 ,我需要使用参数调用现有的SQL Server存储过程。
程序执行正常,我传入的参数正常工作。
我遇到一个问题,无法从SQL Server捕获任何警告或错误。我的存储过程是'GetProcessEvents'
,它带有参数@runId。如果在我的C#中将@runId更改为@xxxxxId,则存储过程将不会运行,但不会向我的C#返回任何错误。
我尝试返回Convert.ToInt32(cmd.ExecuteScalar());
,就像“ ExecuteReader”下面的代码一样,但是都没有用。即使我在存储过程中添加了“ select 100/0”,也不会返回任何异常-如果直接在SQL Server Management Studio中运行该过程,则会得到 “消息8134,级别16,状态1,行1.除以零错误。 ”,我希望这是C#中的异常。
try
{
if (sqlConn == null)
return 0;
DbCommand cmd = _context.Database.GetDbConnection().CreateCommand();
cmd.CommandText = "GetProcessEvents";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@runId",runId));
if (cmd.Connection.State != ConnectionState.Open)
cmd.Connection.Open();
var reader = cmd.ExecuteReader();
if (reader.HasRows) // I've tried with and without this if
{
while (reader.Read())
return reader.GetInt32(0);
}
return runId;
}
catch (SqlException sqle)
{
throw sqle; // No exception ever caught
}
catch (Exception e)
{
throw e;
}
我是否需要尝试This StackOverflow中的其他解决方案之一-尽管我尝试了FromSql
并且Visual Studio指示它已过时。
请帮助。非常感谢!
此外,万一这有什么用,我正在使用SignalR成功地检索从激发的存储过程引发的SQL Server警告(RAISERROR ( '1',10) WITH NOWAIT)在执行可能需要长时间运行的过程时退回进度事件。这工作正常,并且C#正在从SQL Server接收事件。 请注意:在没有连接以下代码的情况下,我已经尝试了上述问题。
sqlConn.FireInfoMessageEventOnUserErrors = true;
// Number of times the stored procedure(s) will return notifications to the Client
if (percentageNotifications == null)
percentageNotifications = 10;
// Wire up delegate to SQL Server connection
sqlConn.InfoMessage += delegate (object sender,SqlInfoMessageEventArgs e)
{
// Fire notification to SignalR Hub and anwards to client on RAISERROR (severity <10: just a message) from Sql Server
NotificationsComplete++;
_contextHub.Clients.All.SendAsync("UpdateProgressBar",taskId,((100 / percentageNotifications) * NotificationsComplete).ToString());
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。