Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на Dapper с SQL пространствени типове като параметър

Ключът към внедряването на странни и прекрасни параметри, специфични за DB, се свежда до SqlMapper.IDynamicParameters

Този прост интерфейс има една крайна точка:

public interface IDynamicParameters
{
    void AddParameters(IDbCommand command);
}

Dapper вече има общо изпълнение на DB на този интерфейс, наречено:DynamicParameters което ви позволява да обработвате изходни и връщани стойности.

За емулиране на тези пространствени неща бих опитал нещо като:

public class SpatialParam : SqlMapper.IDynamicParameters
{
    string name; 
    object val;

    public SpatialParam(string name, object val)
    {
       this.name = name; 
       this.val = val;
    }

    public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
    {
       var sqlCommand = (SqlCommand)command;
       sqlCommand.Parameters.Add(new SqlParameter
       {
          UdtTypeName = "geometry",
          Value = val,
          ParameterName = name
       });
    }
}

Употреба:

cnn.Query("SELECT * FROM MyTable WHERE @parameter.STIntersects(MyGeometryColumn)",
  new SpatialParam("@parameter", builder.ConstructedGeometry));

Тази проста реализация на интерфейса обработва само един параметър, но може лесно да бъде разширена, за да обработва множество параметри, или чрез предаване от конструктора, или чрез добавяне на помощен метод AddParameter.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да коригирате „Изразът EXECUTE не бе успешен, защото неговата клауза WITH RESULT SETS посочва 1 набор(а) резултата...“ в SQL Server

  2. Какво означава времеви печат в T-Sql в C#?

  3. T-SQL разделен низ

  4. SQL Server 2008 IDENTITY_INSERT е включена грешка при вмъкване

  5. използване на pyodbc на linux за вмъкване на уникод или utf-8 знаци в поле nvarchar mssql