2010-09-01 11 views
3

J'ai le code C# suivant pour appeler la procédure stockée testproc, mais lorsque j'exécute cette application, elle indique qu'elle n'a pas pu trouver la procédure stockée testproc.Erreur lors de l'appel de la procédure stockée du C#

Ceci est mon C# code derrière pour appeler la procédure stockée:

SqlConnection con = new SqlConnection(); 
con.ConnectionString = "data source='example.com';user id='sa';password='password';persist security info=False;initial catalog=Test;Connect Timeout=100; Min Pool Size=100; Max Pool Size=500"; 
con.Open(); 

DataSet ds = new DataSet(); 
SqlCommand com = new SqlCommand("testproc",con); 
SqlDataAdapter sqlda = new SqlDataAdapter(com); 
//sqlda.SelectCommand.CommandText = "SELECT Id,Name1,ZipCode,StreetName,StreetNumber,State1,Lat,Lng,Keyword, (6371 * ACOS(COS((12.925432/57.2958)) * COS( (Lat/57.2958) ) * COS((Lng/57.2958) - (77.5940171/57.2958)) + SIN(12.925432/57.2958) * SIN( Lat/57.2958 ))) AS distance FROM Business_Details where((StreetName like '%jayanagar%')and (Keyword like '%plumbing%'))ORDER BY distance;"; 
//sqlda.CommandText = "select * from business where((distance<'" + radius + "')and (StreetName like '%" + streetname + "%')and (Keyword like '%" + keyword1 + "%')) order by distance"; 
//com.CommandText = "testproc "; 
com.CommandType = CommandType.StoredProcedure; 
com.Parameters.Add(new SqlParameter("@lat1",SqlDbType.Float,50,lat1)); 
com.Parameters.Add(new SqlParameter("@lng1",SqlDbType.Float,50,lng1)); 
com.Parameters.Add(new SqlParameter("@radius1",SqlDbType.Int,10,radius1)); 
com.Parameters.Add(new SqlParameter("@streetname", SqlDbType.VarChar, 50, streetname)); 
com.Parameters.Add(new SqlParameter("@keyword1", SqlDbType.VarChar, 50, keyword1)); 
com.Parameters[0].Value = lat1; 
com.Parameters[1].Value = lng1; 
com.Parameters[2].Value = radius1; 
com.Parameters[3].Value = streetname; 
com.Parameters[4].Value = keyword1; 
try 
{     
    sqlda.Fill(ds); 
    con.Close(); 
} 
catch (Exception e) 
{ 
    con.Close(); 
} 

Ceci est ma procédure stockée je l'ai écrit dans le serveur SQL. Il fonctionne avec succès dans le serveur SQL

USE [Test] 
GO 
/****** Object: StoredProcedure [dbo].[tesproc] Script Date: 09/01/2010 13:00:54 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[tesproc] 
    -- Add the parameters for the stored procedure here 
    @a float, @b float, @d int,@s varchar(50),@k varchar(50) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    select Id, Name1,ZipCode,StreetName,StreetNumber,State1,Lat,Lng , (6371 * ACOS(COS((@a/57.2958)) * COS( (Lat/57.2958) ) * COS((Lng/57.2958) - (@b /57.2958)) + SIN(@a/57.2958) * SIN( Lat/57.2958 ))) as distance from business_details where ((6371 * ACOS(COS((@a/57.2958)) * COS( (Lat/57.2958) ) * COS((Lng/57.2958) - (@b /57.2958)) + SIN(@a/57.2958) * SIN( Lat/57.2958 )))<@d and StreetName like '%'+ @s + '%' and Keyword like '%'+ @k +'%') 
END 
+3

Je sais qu'il est un db local, et il ressemble à un mot de passe de test, mais vous devez toujours être prudent poster vos détails de connexion. :) – DavidGouge

+0

Merci pour votre suggestion à partir de la prochaine, je ne publierai aucun détail de connexion. – mahesh

Répondre

3

Quoi qu'il en soit votre code devrait ressembler à ceci:

using (SqlConnection connection = new SqlConnection(connectionString)) 
using (SqlComamnd command = connection.CreateCommand()) 
{ 
    command.CommandText = commandText; 
    command.CommandType = CommandType.StoredProcedure; 

    command.Parameters.Add("@lat1", SqlDbType.Float,50, lat1).Value = lat1; 
    command.Parameters.Add("@lng1", SqlDbType.Float,50, lng1).Value = lng1; 
    command.Parameters.Add("@radius1", SqlDbType.Int,10, radius1).Value = radius1; 
    command.Parameters.Add("@streetname", SqlDbType.VarChar, 50, streetname).Value = streetname; 
    command.Parameters.Add("@keyword1", SqlDbType.VarChar, 50, keyword1).Value = keyword1; 

    connection .Open(); 
    DataSet ds = new DataSet(); 
    using (SqlDataAdapter adapter = neq SqlDataAdapter(command)) 
    { 
     adapter.Fill(ds);     
    } 
} 
+0

@mahesh: Merci, content que ça a aidé! :) – abatishchev

6

Votre déclaration ALTER appelle tesproc, mais votre commande SQL appelle testproc

+0

Merci pour la réponse, je ne suis pas en mesure de suivre votre réponse s'il vous plaît pouvez-vous être plus clair – mahesh

+0

Votre procédure stockée est appelée 'tesproc' avec seulement un T. La ligne suivante a testproc orthographié avec deux T:' SqlCommand com = new SqlCommand ("testproc", con); L'un d'entre eux est une erreur typographique. Je ne peux pas être beaucoup plus clair que ça. – LittleBobbyTables

+0

Merci pour votre réponse, désolé de mon côté, j'ai bien remarqué que leur faute d'orthographe. – mahesh

5

Vérifiez votre orthographe, votre procédure est appelée

[dbo].[tesproc] 

et votre code est appeler

SqlCommand("testproc",con); 

Vous pouvez aussi o ajouter des paramètres à l'aide

Parameters.AddWithValue(string parameterName, Object value) 

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

si vous voulez :)

+0

Merci pour votre réponse, je n'ai pas remarqué que l'erreur d'orthographe du tout merci pour la réponse – mahesh

3

Au lieu de ce code volumineux

com.CommandType = CommandType.StoredProcedure; 
com.Parameters.Add(new SqlParameter("@lat1",SqlDbType.Float,50,lat1)); 
com.Parameters.Add(new SqlParameter("@lng1",SqlDbType.Float,50,lng1)); 
com.Parameters.Add(new SqlParameter("@radius1",SqlDbType.Int,10,radius1)); 
com.Parameters.Add(new SqlParameter("@streetname", SqlDbType.VarChar, 50, streetname)); 
com.Parameters.Add(new SqlParameter("@keyword1", SqlDbType.VarChar, 50, keyword1)); 
com.Parameters[0].Value = lat1; 
com.Parameters[1].Value = lng1; 
com.Parameters[2].Value = radius1; 
com.Parameters[3].Value = streetname; 
com.Parameters[4].Value = keyword1; 

Et vous assignez la valeur à nouveau aux paramètres

us e AddWithValue méthode pour ajouter le paramètre à commander

com.Parameters.AddWithValue("@lat1", lat1)); 
com.Parameters.AddWithValue("@lng1", lng1)); 
com.Parameters.AddWithValue("@radius1", radius1)); 
com.Parameters.AddWithValue("@streetname", streetname)); 
com.Parameters.AddWithValue("@keyword1", keyword1)); 
+1

Merci pour les suggestions, j'ai apporté des modifications au code com.Parameters.AddwithValue ("@ lat1", lat1); Son aide merci. – mahesh