SqlParameterCollection принимает только ненулевые объекты типа Parameter - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь использовать хранимые процедуры в Entity Framework Core. При выполнении хранимой процедуры я передаю два входных параметра и один выходной параметр. Я получаю эту ошибку:

SqlParameterCollection принимает только объекты типа SqlParameter, отличные от NULL, а не объекты SqlParameter.

Это мой код:

public string InsertCardsData(DateTime RecordingStartDate, DateTime RecordingEndDate)
{
        try
        {
            // DateTime DRecEndDate = Convert.ToDateTime(RecordingEndDate);
            DateTime DRecEndDate = RecordingEndDate.AddDays(1);

            var RecordStartDate = new SqlParameter
            {
                ParameterName = "RecordingStartDate",
                Value = RecordingStartDate,
                Direction = ParameterDirection.Input
            };

            var RecordEndDate = new SqlParameter
            {
                ParameterName = "RecordingEndDate",
                Value = DRecEndDate,
                Direction = ParameterDirection.Input
            };

            var RecordCount = new SqlParameter
            {
                ParameterName = "RecLoadCount",
                Direction = ParameterDirection.Output
            };

            var SQL = "Exec Recload_InsertPrimeExtract @RecordingStartDate, @RecordingEndDate, @RecLoadCount OUT";
            var result = _context.Database.ExecuteSqlRaw(SQL, RecordStartDate, RecordEndDate, RecordCount);
            var RecordCountValue = RecordCount.Value.ToString();

            return RecordCountValue;
        }
        catch (Exception ex)
        {
            return "";
        }
}

Я добавлю содержательное выражение catch, но сейчас я ставлю точки останова в операторе catch и возникает указанная выше ошибка.

Любая помощь будет высоко оценена.

1 Ответ

1 голос
/ 26 марта 2020

Скорее всего, ваши проблемы вызваны из-за критического изменения в EF Core 3 , объявив using System.Data.SqlClient, когда оно должно быть using Microsoft.Data.SqlClient

Почему

Microsoft.Data.SqlClient является флагманским драйвером доступа к данным для SQL Сервер движется вперед, и System.Data.SqlClient больше не является центром разработки. Некоторые важные функции, такие как Always Encrypted, доступны только для Microsoft.Data.SqlClient.

Далее Подробнее

Если ваш код принимает прямую зависимость на System.Data.SqlClient вместо этого вы должны изменить ссылку на Microsoft.Data.SqlClient; поскольку эти два пакета поддерживают очень высокую степень совместимости API, это должно быть только простым изменением пакета и пространства имен.

Проблемы, связанные с github

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...