2010-09-01 3 views
0

J'ai le code de procédure stockée suivant quand je l'exécute donne une erreur indiquant nom de colonne non valide Lat, Lng. Ces variables Lat et Lng sont des paramètres appelés à partir du code C# derrière avec sql query indiqué enfin dans ce paragraphe particulier.problème avec la création de procédure stockée et vue dans le serveur 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)"; 
+0

Votre requête est sujette à l'injection Sql. (Lorsque la variable de nom de rue a la valeur de '')), DELETE Business_Details; - ", l'exécution de SelectCommand videra votre table dans la base de données.) – treaschf

+0

Cette question a été répétée en tant que http://stackoverflow.com/q/ 3615364/217751 – treaschf

Répondre

1

Que diriez-vous de placer le signe @ devant ces paramètres? Lorsque vous créez la fonction spherical_distance, elle ne sait rien sur les expressions Lat et Lng

+0

Merci pour la réponse que j'ai essayée en mettant @ devant Lat et Lng mais cela indique une erreur en disant Msg 137, Niveau 15, Etat 2, Procédure sphérique_distance, Ligne 6 Doit déclarer la variable scalaire "@Lat". CREATE FONCTION spherical_distance (@a flotteur, flotteur @b, flotteur @c) RETOURS flotteur AS BEGIN RETOUR (6371 * ACOS (COS ((@ a/b @)) * COS ((@ Lat/@ b)) * COS ((@ Lng/@ b) - (@ c/@ b)) + SIN (@ a/@ b) * SIN (@ Lat/@ b))) FIN – mahesh

+0

vous avez oublié d'écrire comme ça ... '"+ lat +"' ... '"+ lng +"' ... – ppshein

1

Devraient-ils être deux paramètres supplémentaires de la fonction, comme @a, @b et @c étaient? (La fonction ne sait rien sur la vue.)

plus tard lorsque vous appelez la fonction, vous passez la valeur de Colum Lat dans @a et de Lng en @c, donc dans la fonction de ces deux paramètres contiendront les valeurs de ces colonnes.

Questions connexes