C# 将数据类型varchar转换为float时出错。准备报表

C# 将数据类型varchar转换为float时出错。准备报表,c#,sql-server-2008,C#,Sql Server 2008,我一直在寻找解决方案,但迄今为止,尽管其他一些人也有类似的问题,但没有发现任何有效的方法。我正在使用以下代码运行SQL语句(对于可怕的格式设置感到抱歉。这就是我们在这里使用的): CONRIBUTO列是一个varchar(max) “几何图形”列是一种几何图形数据类型 当我直接在数据库上运行该语句时,它会毫无错误地运行,并返回我期望的结果 但是,当我通过C#运行它时,使用一个准备好的语句(从C#代码前面的一个表中获得)会产生错误。传入的参数如下所示: @5 = -25.43623984375 d

我一直在寻找解决方案,但迄今为止,尽管其他一些人也有类似的问题,但没有发现任何有效的方法。我正在使用以下代码运行SQL语句(对于可怕的格式设置感到抱歉。这就是我们在这里使用的):

CONRIBUTO列是一个varchar(max) “几何图形”列是一种几何图形数据类型

当我直接在数据库上运行该语句时,它会毫无错误地运行,并返回我期望的结果

但是,当我通过C#运行它时,使用一个准备好的语句(从C#代码前面的一个表中获得)会产生错误。传入的参数如下所示:

@5 = -25.43623984375 double
@6 = 44.257784519021 double
@7 = 21.62918984375  double
@8 = 60.752403080295 double
select CONTRIBUTO, count(*) 
from HA_WITHOUT_SCOTLAND
where STIntersects(GEOMETRY, geometry::STGeomFromText('POLYGON(('+@5+' '+@6+', '+@7+' '+@6+', '+@7+' '+@8+', '+@5+' '+@8+', '+@5+' '+@6+'))', 4326)) = 1 
group by CONTRIBUTO
不带替换值的查询如下所示:

@5 = -25.43623984375 double
@6 = 44.257784519021 double
@7 = 21.62918984375  double
@8 = 60.752403080295 double
select CONTRIBUTO, count(*) 
from HA_WITHOUT_SCOTLAND
where STIntersects(GEOMETRY, geometry::STGeomFromText('POLYGON(('+@5+' '+@6+', '+@7+' '+@6+', '+@7+' '+@8+', '+@5+' '+@8+', '+@5+' '+@6+'))', 4326)) = 1 
group by CONTRIBUTO
鉴于列和参数是正确的数据类型,我看不到任何地方会产生这种错误


有人能解释一下吗?

问题出在下面一节:

'POLYGON(('+@5+'...
这将尝试将文本
多边形(“
转换为浮点,以便与
@S
参数匹配(以便可以添加它们)

相反,您可以尝试将每个参数包装在
转换中,例如:

'POLYGON(('+CONVERT(VARCHAR(100),@5)+'...
对于
+
操作符,everything将是一个字符串,它将连接它们


在您的替换版本中,您已经自己处理了到varchar的转换,因此没有问题。

问题在于以下部分:

'POLYGON(('+@5+'...
这将尝试将文本
多边形(“
转换为浮点,以便与
@S
参数匹配(以便可以添加它们)

相反,您可以尝试将每个参数包装在
转换中,例如:

'POLYGON(('+CONVERT(VARCHAR(100),@5)+'...
对于
+
操作符,everything将是一个字符串,它将连接它们


在替换版本中,您已经自己处理了到varchar的转换,因此没有问题。

@V4Vendetta:the
geometry\u taged\u text
param是一个nvarchar(max)(请参见)@V4Vendetta:the
geometry\u taged\u text
param是一个nvarchar(max)(请参见)不确定,但它不会像OP显示的那样给出替换查询本身,因为您将值放在
@5
中?@s被定义为双精度,但不是字符串。是的,但不会
+
将它们作为字符串并追加并最终确定到同一个查询中。谢谢。我已经从技术上处理了这个问题,您是正确的e myslef在替换的查询中。我很惊讶我没有意识到这可能是个问题。您建议的修复程序工作得很好,还帮助我修复了另外两个遭受相同错误的查询。我没有意识到SQL Server会尝试将“多边形…”字符串转换为浮点,因为PostgreSQL和Oracle似乎没有这样做当使用类似的语法时,请这样做。再次感谢。不确定,但它不会像OP显示的那样给出替换查询本身,因为您将值放置在
@5
中?@s被定义为双精度,但不是字符串。是的,但不会
+
将它们作为字符串并附加到同一查询中并最终确定。谢谢。您是正确的rect,因为我已经在替换查询中从技术上解决了这个问题。我很惊讶我没有意识到这可能是个问题。您建议的修复工作非常好,还帮助我修复了另外两个遭受相同错误的查询。我没有意识到SQL Server会尝试转换“多边形…”当使用类似的语法时,PostgreSQL和Oracle似乎不会以这种方式运行。再次感谢。