Nghe có vẻ hiển nhiên, nhưng tại sao không sử dụng cùng kiểu dữ liệu đã được cài đặt làm UDT trong SQL Server - SqlGeography
?
Cách sau hoạt động tốt với phiên bản SQL Server 2012. Tôi không thể kiểm tra SQL Server 2008 nhưng tôi cho rằng nó sẽ hoạt động như cũ:
using System;
using Microsoft.SqlServer.Types;
using System.Data.SqlClient;
using System.Data;
namespace ConsoleApplication4
{
class Program
{
static void Main()
{
var geom1 = SqlGeography.STGeomFromText(
new System.Data.SqlTypes.SqlChars(
"LINESTRING(-122.360 47.656, -122.343 47.656)"), 4326);
var geom2 = SqlGeography.STGeomFromText(
new System.Data.SqlTypes.SqlChars(
"LINESTRING(-100.0 45.0, -1420 49.0)"), 4326);
using(var conn = new SqlConnection(
@"Server=Server;Database=master;Integrated Security=SSPI;"))
{
using (var cmd = new SqlCommand(
"select @parm1.STIntersects(@parm2)", conn))
{
var p1 = cmd.Parameters.Add("@parm1", SqlDbType.Udt);
p1.UdtTypeName = "geography";
p1.Value = geom1;
var p2 = cmd.Parameters.Add("@parm2", SqlDbType.Udt);
p2.UdtTypeName = "geography";
p2.Value = geom2;
conn.Open();
Console.WriteLine(cmd.ExecuteScalar());
}
}
Console.ReadLine();
}
}
}