.Net Core: невозможно передать параметр "география" в хранимую процедуру SQL Server

Я хочу передать параметр типа SQL Server geography в хранимую процедуру из .Net Core.

Пока что я установил пакеты System.Data.SqlClient и Microsoft.Spatial. Вот мой код:

using (SqlCommand cmd = new SqlCommand("myproc", connection))
{
    cmd.CommandType = CommandType.StoredProcedure;

    // Here, GeographyPoint is of type Microsoft.Spatial.GeographyPoint, and
    // I am pretty sure this is the wrong type to use...
    GeographyPoint gp = GeographyPoint.Create(lat, lon);
    cmd.Parameters.AddWithValue("@Location", gp);

    connection.Open();
    cmd.ExecuteNonQuery();
}

Когда я пытаюсь выполнить это, я получаю следующее исключение:

System.ArgumentException: 'No mapping exists from object type Microsoft.Spatial.GeographyPointImplementation to a known managed provider native type

Затем я попытался установить пакет Microsoft.SqlServer.Types, но он несовместим с .Net Core 1.1:

Package Microsoft.SqlServer.Types 14.0.314.76 is not compatible with netcoreapp1.1 (.NETCoreApp,Version=v1.1). Package Microsoft.SqlServer.Types 14.0.314.76 supports: net40 (.NETFramework,Version=v4.0)

Затем я попытался указать, что параметр географии - Udt:

cmd.Parameters["@Location"].SqlDbType = SqlDbType.Udt; 
//cmd.Parameters["@Location"].UdtTypeName = "Geography";

ТЕМ НЕ МЕНИЕ: Я не могу установить UdtTypeName на Geography из-за Эта проблема, поэтому это не сработает, потому что UdtTypeName требуется для параметров Udt.

Затем я обновился до .Net Core 2.0. Я снова попытался добавить пакет Microsoft.SqlServer.Types: на этот раз он установился «успешно», но когда я создаю свой проект, я получаю эту ошибку:

warning NU1701: Package 'Microsoft.SqlServer.Types 14.0.314.76' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project.

Я не могу получить доступ ни к одному из типов в моем коде, поэтому это не сработало.

И остается вопрос: как передать параметр типа SQL Server geography в хранимую процедуру из .Net Core?

Отказ от ответственности: я сделал это 5+ лет назад ... но можете ли вы передать строку в форме "(lat,lng)" в качестве параметра и посмотреть, работает ли это?

Nikola Sivkov 13.06.2018 21:11

Я пробовал несколько вариантов форматированной строки, но безуспешно: System.Data.SqlClient.SqlException (0x80131904): ошибка преобразования типа данных nvarchar в географию.

A. Abrams 13.06.2018 21:18

в качестве обходного пути, возможно, вы можете попробовать изменить SP, чтобы принимать 2 поплавка и объединить это с географической точкой в ​​SP

Nikola Sivkov 13.06.2018 22:03

Да, я могу это сделать, но сначала я надеюсь на правильное решение в .Net Core. Я планирую передавать для этого параметра различные типы геометрии (не только точки), и я не хочу создавать сохраненную процедуру для каждого из них.

A. Abrams 13.06.2018 22:05

Боковое примечание: вы должны нет использовать префикс sp_ для ваших хранимых процедур. У Microsoft есть зарезервировал этот префикс для собственного использования (см. Именование хранимых процедур), и вы действительно рискуете столкнуться с конфликтом имен когда-нибудь в будущем. Это также плохо для производительности вашей хранимой процедуры. Лучше просто избегать sp_ и использовать что-то еще в качестве префикса - или вообще не использовать префикс!

marc_s 13.06.2018 22:07

Хороший момент - спасибо!

A. Abrams 13.06.2018 22:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
6
753
0

Другие вопросы по теме