Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将SQL空间结果传输到C应用程序?_C#_Sql Server 2008_Stored Procedures_Ado.net - Fatal编程技术网

C# 如何将SQL空间结果传输到C应用程序?

C# 如何将SQL空间结果传输到C应用程序?,c#,sql-server-2008,stored-procedures,ado.net,C#,Sql Server 2008,Stored Procedures,Ado.net,我有一个tableTEST,其中包含一些事件、事件日期和此事件的人数 Dat | Event | Qty 2012-30-08 SomeEvent1 5 2012-09-06 SomeEvent2 10 2012-09-18 SomeEvent3 7 2012-09-29 SomeEvent4 1 2012-10-03 SomeEvent5 2 我已经构建了此表内容的图形表示

我有一个tableTEST,其中包含一些事件、事件日期和此事件的人数

   Dat      |   Event      |  Qty
2012-30-08    SomeEvent1       5
2012-09-06    SomeEvent2      10
2012-09-18    SomeEvent3       7
2012-09-29    SomeEvent4       1
2012-10-03    SomeEvent5       2
我已经构建了此表内容的图形表示。在X轴上,我显示我的时间线-从第一个日期到最后一个日期。 X轴上的圆圈表示当前事件中的人数圆圈半径=人数。 这里是我的查询和空间结果:

DECLARE @FIRST_DATE DATE
DECLARE @LAST_DATE DATE
SET @FIRST_DATE = (SELECT MAX([Date]) FROM [DATABSE_TEST].dbo.TEST)
SET @LAST_DATE = (SELECT MIN([Date]) FROM [DATABSE_TEST].dbo.TEST)

--TIMELINE Build my timeline
DECLARE @SQL_TIMELINE VARCHAR(MAX)
SET @SQL_TIMELINE = 'SELECT geometry::STPolyFromText(''POLYGON((0 -0.1, 0 0.1,' + CAST(DATEDIFF(DD, @LAST_DATE,     @FIRST_DATE) AS VARCHAR) + ' 0.1, ' + CAST(DATEDIFF(DD, @LAST_DATE, @FIRST_DATE) AS VARCHAR) + ' -0.1, 0 -0.1))'', 0) AS DRAWING' 

--CIRCLES
DECLARE @SQL_CIRCLES VARCHAR(MAX) = ''

--POINTS Array of points
DECLARE @POINTS VARCHAR(MAX)

--DATE Date of current event
DECLARE @DATE DATE

--RADIUS = qty of peoples
DECLARE @RADIUS FLOAT

--X,Y coordinates of current circle
DECLARE @X_COORD FLOAT
DECLARE @Y_COORD FLOAT
DECLARE @DEGREE INT = 0


DECLARE CUR CURSOR LOCAL FOR SELECT [Date], Qty FROM [DATABSE_TEST].dbo.TEST
OPEN CUR
    FETCH NEXT FROM CUR INTO @DATE, @RADIUS
    WHILE @@FETCH_STATUS = 0 
        BEGIN
        SET @POINTS = ''
        SET @DEGREE = 0
        WHILE (@DEGREE <= 360)
            BEGIN
            --Find circle coordinates
            SET @X_COORD = DATEDIFF(DD, @LAST_DATE, @DATE) + @RADIUS * COS(@DEGREE*PI()/180)
            SET @Y_COORD = 0 + @RADIUS * SIN(@DEGREE*PI()/180)
            --Build poinrs array            
            SET @POINTS = @POINTS + CAST(@X_COORD AS VARCHAR) + ' ' + CAST(@Y_COORD AS VARCHAR) + ', '
            SET @DEGREE = @DEGREE + 10      
        END 
        --Build query: points coordinates + last point SUBSTRING(@POINTS, 0, CHARINDEX(',', @POINTS)) - tha same as first point in @POINTS to close POLYGON
        SET @SQL_CIRCLES = @SQL_CIRCLES + ' UNION ALL SELECT geometry::STPolyFromText(''POLYGON((' + @POINTS + SUBSTRING(@POINTS, 0, CHARINDEX(',', @POINTS)) + '))'',0) AS DRAWING'        
        FETCH NEXT FROM CUR INTO @DATE, @RADIUS 
        END  
CLOSE CUR 
DEALLOCATE CUR 
--Execute query
EXEC(@SQL_TIMELINE + @SQL_CIRCLES)

如何将空间结果传递给C应用程序?我想在我的应用程序中显示此图像,但不确定如何正确传输它。

如果您使用的是.Net framework 4.5,则它有一个类型,可用于保存空间数据。这些课程在以下目录下提供


但是,如果您使用的是早期版本的.Net framework,则可以从SQL server获取几何图形,该几何图形将返回对象的WKT,可以在代码中使用

不幸的是,我使用的是.NETFramework3.5。As_text方法适用于几何数据类型变量。我应该更改此方法实现的查询。谢谢,我会试试。不客气,如果您使用的是.Net 3.5,那么最好从SQL server返回WKT,然后用C语言处理,ST_AsText可以处理SQL server的几何图形和地理类型