Я пытаюсь выполнить SP, используя приведенный ниже код в .Net Core
using (DBContext context = new DBContext()){
{
using (var command = context.Database.GetDbConnection().CreateCommand())
{
command.CommandText = "Sp_Name";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@input", SqlDbType.VarChar ,3) { Value = InputValue });
command.Parameters.Add(new SqlParameter("@Return_Value", SqlDbType.VarChar, 3) { Value = string.Empty });
context.Database.OpenConnection();
var dataReader = command.ExecuteReader();
if (dataReader.Read())
{
var code = dataReader.GetString(dataReader.GetOrdinal(""));
}
}}
Запрос отлично работает для некоторых входных параметров, но для некоторых выдает исключение, например:
- Этот сценарий работает нормально в EF Code и SQL
SP - exec Sp_Name @input = 'PDX', @Return_Value = ''
--Result (No Column Name) - '3I9'
- Этот сценарий не работает в коде EF, но отлично работает в SQL
SP - exec Sp_Name @input = 'N01', @Return_Value = ''
--Result (No Column Name) - 'WE5'
Сообщение об исключении
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
at Mednax.ReferringPhysician.Data.PdxService.getGPMSCode(String practiceCode) in C:\Work\GIT\ReferringPhysician2\Mednax.ReferringPhysician.WebAPI\Mednax.ReferringPhysician.Data\PdxService.cs:line 971
ClientConnectionId:199f2b1a-cb1b-4752-8632-9f2c54bcefd8
Error Number:-2,State:0,Class:11
Трассировка стека:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
SP выглядит следующим образом:
SP -
(
@Input varchar(3),
@Return_Value varchar(3) output
)
AS
SET NOCOUNT ON
SET @Return_Value = NULL
SELECT TOP 1 @Return_Value = pacl.P_Code
FROM TABLEA pacl with (nolock)
LEFT OUTER JOIN TABLEB rpp with (nolock)
ON rpp.Code = pacl.Code
AND rpp.P_Code = @Input
WHERE rpp.P_Code IS NULL
ORDER BY pacl.P_Code
IF @@Rowcount = 0 SET @Return_Value = '***'
Select @Return_Value
Подробности внутри сообщения об объекте исключения:
![enter image description here](https://i.stack.imgur.com/qmiX6.png)