C# 在sql server中创建存储过程和视图时出现问题

C# 在sql server中创建存储过程和视图时出现问题,c#,sql,sql-server-2005,C#,Sql,Sql Server 2005,当我执行以下存储过程代码时,它给出了一个错误,显示无效的列名Lat,Lng。这些Lat和Lng变量是从后面的c代码调用的参数,最后在这个特定的段落中指出了sql查询 CREATE FUNCTION spherical_distance(@a float, @b float, @c float) RETURNS float AS BEGIN RETURN ( 6371 * ACOS( COS( (@a/@b) ) * COS( (Lat/@b) ) * COS( ( Lng/@b )

当我执行以下存储过程代码时,它给出了一个错误,显示无效的列名Lat,Lng。这些Lat和Lng变量是从后面的c代码调用的参数,最后在这个特定的段落中指出了sql查询

CREATE FUNCTION spherical_distance(@a float, @b float, @c float)
RETURNS float
AS
BEGIN
    RETURN ( 6371 * ACOS( COS( (@a/@b) ) * COS(  (Lat/@b)  ) * COS( ( Lng/@b ) - (@c/@b) )  + SIN( @a/@b ) * SIN(  Lat/@b  ) ) )    
END

create view [dbo].[business] as 
SELECT Id,
       Name1,
       ZipCode,
       StreetName,
       StreetNumber,
       State1,
       Lat,
       Lng,
       Keyword
  FROM Business_Details

sqlda.SelectCommand.CommandText = "select *, spherical_distance( Lat, 57.2958, Lng) as distance
                                     from business 
                                    where (( distance < '" + radius + "' )
                                      and (StreetName like '%" + streetname + "%')
                                      and (Keyword like '%" + keyword1 + "%' )) 
                                 order by spherical_distance(Lat,57.2958,Lng)";

在这些参数前面加上@号怎么样?

创建球形距离函数时,它对Lat和Lng表达式一无所知。这应该是函数的两个附加参数,比如@a、@b和@c吗?函数对视图一无所知


稍后调用该函数时,将值从columlat传递到@a,从Lng传递到@c,因此在函数中,这两个参数将包含这些列的值。

感谢我的回复,我尝试将@放在Lat和Lng的前面,但它表示错误,称为Msg 137,级别15,状态2,过程距离,第6行必须声明标量变量@Lat.CREATE函数_distance@afloat、@b float、@c float返回float作为BEGIN RETURN 6371*ACOS COS@a/@b*COS@Lat/@b*COS@Lng/@b-@c/@b+SIN@a/@b*SIN@Lat/@b end您的查询受Sql注入的约束。当streetname变量的值为“”时;删除业务单元详细信息;-,运行SelectCommand将清空数据库中的表。此问题已重复如下