sql >> Database teknologi >  >> RDS >> Sqlserver

Brug af Dapper med SQL Spatial Types som parameter

Nøglen til at implementere mærkelige og vidunderlige DB-specifikke parametre koger alle ned til SqlMapper.IDynamicParameters

Denne enkle grænseflade har et enkelt slutpunkt:

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

Dapper har allerede en generisk DB-implementering af denne grænseflade kaldet:DynamicParameters som giver dig mulighed for at håndtere output- og returværdier.

For at efterligne disse rumlige ting ville jeg prøve noget som:

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
       });
    }
}

Brug:

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

Denne enkle implementering af grænsefladen håndterer kun en enkelt parameter, men den kan nemt udvides til at håndtere flere parametre, enten ved at sende ind fra konstruktøren eller tilføje en hjælpe-AddParameter-metode.



  1. Hvordan bestiller man efter antal i SQL?

  2. Find forbindelseslæk i Java-applikationen

  3. MySQL – Forbindelsesfejl – [MySQL][ODBC 5.3(w)-driver]Værten 'IP' har ikke tilladelse til at oprette forbindelse til denne MySQL-server

  4. Skift decimalseparator i MySQL