Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng Dapper với kiểu không gian SQL làm tham số

Chìa khóa để triển khai các thông số cụ thể DB kỳ lạ và tuyệt vời, tất cả đều nằm gọn trong SqlMapper.IDynamicParameters

Giao diện đơn giản này có một điểm cuối duy nhất:

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

Dapper đã có một triển khai chung DB của giao diện này được gọi là:DynamicParameters cho phép bạn xử lý các giá trị đầu ra và trả về.

Để mô phỏng công cụ không gian này, tôi sẽ thử một cái gì đó như:

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

Cách sử dụng:

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

Việc triển khai đơn giản này của giao diện chỉ xử lý một tham số duy nhất, nhưng nó có thể dễ dàng được mở rộng để xử lý nhiều tham số, bằng cách chuyển vào từ phương thức khởi tạo hoặc thêm phương thức AddParameter của trình trợ giúp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm khóa chính vào bảng hiện có

  2. Các hàng đến các giá trị được phân tách bằng dấu phẩy bằng thẻ XML

  3. Tôi có thể tạo chức năng toàn cục trong SQL Server không?

  4. Tại sao câu lệnh xóa SQL đơn sẽ gây ra bế tắc?

  5. Cú pháp không chính xác gần 'GO'