我在带有IIS 8的Windows Server 2012上部署的ASP.NET MVC中有一个Web应用程序,当我调用运行存储过程的方法运行标量函数时它不起作用,它不会给我任何有用的错误信息。我尝试使用Log4Net但不保存数据库上的任何日志。它在部署之前工作,我给了数据库,存储过程和函数所有的安全权限。
这是存储过程
PROCEDURE [dbo].[CasasCercanas]
@Latitude DECIMAL(10,6),
@Longitude DECIMAL(10,6),
@Distancia decimal(15,9)
AS
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT
PC.IdCasa,
dbo.CalculateDistance(@Latitude, @Longitude, PC.LatitudCasa, PC.LongitudCasa) as Distance
FROM Casa PC
WHERE
@Distancia > dbo.CalculateDistance(@Latitude, @Longitude, PC.LatitudCasa, PC.LongitudCasa)
AND Activo = 1
ORDER BY
Distance
END
答案 0 :(得分:1)
首先,我认为在函数中关闭SQL查询语句时缺少一个分号。 - 这可能只是转录成SO。
接下来,我可以提供这种帮助:WHERE子句评估从输入lat / lon到每个Casa位置的距离,以便将该距离过滤为<输入@Distancia。对于合格记录,第二次评估相同的距离值....这是效率低下的。
存储过程(一旦正确部署/执行)应评估所有Casa行的距离一次,然后通过@Distancia和Activ0 = 1过滤那些结果,只返回满足两个标准的那些行。
下面的代码段是相关更改: ...
AS
BEGIN
SET NOCOUNT ON;
SELECT
IdCasa, Distance
FROM
(SELECT PC.IdCasa,
dbo.CalculateDistance(@Latitude, @Longitude, PC.LatitudCasa, PC.LongitudCasa) as Distance
FROM Casa PC
WHERE Activo = 1
) ActivoDistance
WHERE
@Distancia > ActivoDistance.Distance
ORDER BY Distance;
END;
我希望这段代码在正确运行后有助于让程序运行得更快!
答案 1 :(得分:0)
我已经解决了这个问题,我将默认的Culture和uiCulture更改为EN-us,因为我在德国服务器上部署它(所有者来自德国)问题是在德国文化中有不同的格式小数点,当它被发送到数据库时,转换中有一个错误,谢谢你的答案。
这是WebConfig中的代码
<globalization enableClientBasedCulture="true" culture="en-US" uiCulture="en-US" />
默认情况下,它捕获了SO文化,因此我将其更改为en-US